for ループの数字で変数を使用するにはどうすればよいですか?
例えば:
num="12"
for i in {0..$num}; do
...
done
変数を使用したブレース展開は、期待どおりに機能しません (詳細については、付録 Bを参照してください)。つまり、数値のリストではなく文字どおり{0..$num}
しか返されません。{0..12}
seq
代わりに次のようにしてみてください。
num="12"
for i in $(seq 0 $num); do
echo $i
done
バッシュのマニュアルによると、
展開の順序は、ブレース展開、チルダ展開、パラメーター、変数、および算術展開とコマンド置換 (左から右に行われる)、単語分割、およびファイル名展開です。
シェルが展開{0..$num}
(ブレース展開) された時点で$num
は、まだ展開されていません (変数展開)。シーケンス式は、シーケンスを生成するために と の両方a..b
が数値である必要がありますが、ここでは 1 つの数値と 1 つの非数値 (リテラル string ) があります。これに失敗すると、シェルは文字どおりの解釈にフォールバックします。その後、変数展開が引き継がれ、最終的にa
b
$num
{0..$num}
{0..12}