1. ホーム

[解決済み】シェルスクリプトの「for」ループ構文

2022-04-06 14:12:57

質問

以下のように動作するようになりました。

for i in {2..10}
do
    echo "output: $i"
done

の行を大量に生成します。 output: 2 , output: 3 といった具合に。

しかし、次のように実行しようとすると

max=10
for i in {2..$max}
do
    echo "$i"
done

は以下を生成します。

output: {2..10}

コンパイラに、$maxを文字列の一部ではなく、配列のもう一方の端として扱うことを認識させるにはどうすればよいですか?

どのように解決するのですか?

ブレイスエクスパンション {x..y} とする。 は他の展開より先に実行されるので、可変長シーケンスには使えません。

その代わりに seq 2 $max メソッドを ユーザー モブ 記載 .

つまり、あなたの例ではこうなります。

max=10
for i in `seq 2 $max`
do
    echo "$i"
done