forループ範囲内のbash変数

forループ範囲内のbash変数

1から100までの数字のリストを印刷したいです。次の for ループを使用します。

number=100
for num in {1..$number}
do
  echo $num
done

コマンドを実行すると、1から100までの数値リストの代わりに{1..100}のみが印刷されます。

ベストアンサー1

はい、中かっこ拡張がパラメータ拡張の前に発生するためです。zshorなどの他のシェルを使用するksh93か、代替構文を使用してください。

標準(POSIX)sh構文

i=1
while [ "$i" -le "$number" ]; do
  echo "$i"
  i=$(($i + 1))
done

Kshスタイルfor ((...))

for ((i=1;i<=number;i++)); do
  echo "$i"
done

使用eval(推奨しない)

eval '
  for i in {1..'"$number"'}; do
    echo "$i"
  done
'

seq使用可能なシステムでGNUコマンドを使用する

unset -v IFS # restore IFS to default
for i in $(seq "$number"); do
  echo "$i"
done

(このコマンドは新しいコマンドを分岐して実行し、シェルがパイプから出力を読み取る必要があるため効率が悪くなります。)

シェルでループを避けてください。

シェルスクリプトでループを使用することは、通常、ループが正しく実行されないことを示します。

ほとんどの場合、コードを別の方法で書くことができます。

おすすめ記事