1

重複の可能性:
bash で数値の範囲を反復するにはどうすればよいですか?

「Hello World!」を印刷しようとしています。以下のコードで 10 回印刷されますが、印刷されるのは 1 回だけです。正しい構文がどこにありませんか?

RUNS=10

for RUN in {1..$RUNS}
do
    echo "Hello World!"
done
4

3 に答える 3

2

この質問には、必要なすべての回答が含まれています

簡単に言えば、次の使用をお勧めします。

RUNS=10
for RUN in $(seq 1 $RUNS)
do
    echo "Hello World!"
done

他のシェルでも動作する可能性が高いためです。

サブシェルのオーバーヘッドを回避したい場合は、次を使用できます。

RUNS=10
i=0;
while [ $i -lt $RUNS ]
do
    echo "Hello World!"
    i=$(($i+1))
done
于 2012-11-06T08:33:20.470 に答える
2

ブレース展開を行いたいのですが、bash は二重展開を行いません (展開する必要があります$RUNS)。によって二重展開を強制することができます

for RUN in $(eval echo {1..$RUNS})
do 
    echo "Hello World!"
done

しかし、ペストのようなこの混乱を避けて、ただやることをお勧めします

for RUN in $(seq 1 $RUNS) 
do 
    echo "Hello World!"
done

また

for ((RUN=1; RUN<RUNS; RUN++))
do 
    echo "Hello World!"
done
于 2012-11-06T08:38:22.560 に答える
0

{A..B}構文は変数を置換していないようです

for ((i=0; i < $RUNS; ++i)); do echo "hello world"; done
于 2012-11-06T08:35:14.577 に答える