次のbashコードを実行しています:
num=$(ls -1 $ini/*.ini | wc -l)
echo "Running $num simulations..."
for i in {1..$num};
do
echo "a"
done
そして、次の出力が得られます。
Running 24 simulations...
a
24 行の 'a' が表示されるはずですが、そうではありません。何を変更すればよいですか?ありがとう!
中括弧は変数を展開しません。あなたが使用することができます
for i in $(seq $num); do
echo "a"
done
例を参照してくださいman bash
:
[...]
シーケンス式の形式
{x..y[..incr]}
は です。ここで、x
とy
は整数または単一の文字であり、incr (オプションのインクリメント) は整数です。整数が指定された場合、式は ~ の間の各数値に展開されx
ますy
。[...]
ブレース展開は他の展開よりも前に実行され、他の展開に特有の文字は結果に保持されます。それは厳密にテキストです。Bash は、展開のコンテキストまたは中括弧内のテキストに構文解釈を適用しません。
[...]
試す:
for (( i=0; i < $num; i++ ))
do
echo "a"
done
ブレース展開はリテラルに対してのみ機能し、変数は展開しません。
考えられる回避策:
for i in $(seq 1 $num) ; do
読んだ:
を含む回答は無視してseq(1)
ください。cdarke の答えは、正しい反復を示しています。
また、これは bash 固有の問題であることに注意してください。ブレース展開を使用する他のシェルは、パラメーター展開を最初に評価しますが、トレードオフがあります。