对于使用变量作为条件的循环,Bash

时间:2012-10-24 12:02:24

标签: bash for-loop

我正在运行以下bash代码:

num=$(ls -1 $ini/*.ini | wc -l)
echo "Running $num simulations..."
for i in {1..$num};
do
    echo "a"
done

我得到以下输出:

Running 24 simulations...
a

它应该打印24行' a'但它没有。我应该改变什么?谢谢!

4 个答案:

答案 0 :(得分:1)

花括号不会扩展变量。你可以用

for i in $(seq $num); do
    echo "a"
done

参见例如man bash

  

[...]

     

序列表达式采用{x..y[..incr]}形式,其中xy也是   整数或单个字符,incr是可选的增量,是一个整数。   提供整数时,表达式会扩展到x和之间的每个数字   y,包括在内。

     

[...]

     

在任何其他扩展和任何字符之前执行大括号扩展   结果中保留了特殊的其他扩展。这是严格的文字。   Bash不对语境使用任何句法解释   扩展或大括号之间的文本。

     

[...]

答案 1 :(得分:1)

尝试:

for (( i=0; i < $num; i++ ))
do
    echo "a"
done

答案 2 :(得分:0)

大括号扩展仅适用于文字,它不会扩展变量。

可能的解决方法:

for i in $(seq 1 $num) ; do

答案 3 :(得分:0)

读:

忽略涉及seq(1)的答案。 cdarke's answer演示了正确的迭代。

另请注意,这是一个特定于bash的问题。其他具有大括号扩展的shell将首先评估参数扩展,但存在权衡。