循环数字的变量

时间:2013-06-27 02:43:31

标签: linux bash

如何在for循环数字中使用变量?

例如:

num="12"
for i in {0..$num}; do
        ...
done

2 个答案:

答案 0 :(得分:6)

使用变量进行大括号扩展并不像预期的那样有效(请参阅附录B 了解详细信息),即{0..$num}只会字面而不是列表返回{0..12}数量。

请尝试seq,而不是这样:

num="12"
for i in $(seq 0 $num); do
    echo $i
done

附录B:多汁细节

bash manual说,

  

扩展的顺序是:大括号扩展,波浪扩展,参数,变量,算术扩展和命令替换(以从左到右的方式完成),单词拆分和文件名扩展。

当shell扩展{0..$num}(大括号扩展)时,$num尚未扩展(可变扩展)。序列表达式a..b需要ab作为数字来生成序列,但是这里我们有一个数字和一个非数字(文字字符串$num) 。如果做不到这一点,shell会回归到字面上解释{0..$num}。然后变量扩展接管,最后我们得到{0..12}

答案 1 :(得分:2)

Bash 变量扩展之前支持扩展 ,因此您将获得类似{的输出{1}}。使用{1..12},您可以使用它。

测试:

eval

请注意: eval is evil in disguise.