如何从bash中的变量构造一个列表?

时间:2012-11-06 08:27:33

标签: bash unix

  

可能重复:
  How do I iterate over a range of numbers in bash?

我正在尝试打印“Hello World!”通过下面的代码10次,但它只打印一次。我在哪里错过了正确的语法?

RUNS=10

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

3 个答案:

答案 0 :(得分:2)

This question contains all the answers you need

简而言之,我建议您使用:

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

因为它也可能适用于其他shell。

如果您想避免子shell的开销,可以使用:

RUNS=10
i=0;
while [ $i -lt $RUNS ]
do
    echo "Hello World!"
    i=$(($i+1))
done

答案 1 :(得分: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

答案 2 :(得分:0)

{A..B} 语法似乎没有替换变量

for ((i=0; i < $RUNS; ++i)); do echo "hello world"; done