如何在for循环数字中使用变量?
例如:
num="12"
for i in {0..$num}; do
...
done
答案 0 :(得分:6)
使用变量进行大括号扩展并不像预期的那样有效(请参阅附录B 了解详细信息),即{0..$num}
只会字面而不是列表返回{0..12}
数量。
请尝试seq
,而不是这样:
num="12"
for i in $(seq 0 $num); do
echo $i
done
扩展的顺序是:大括号扩展,波浪扩展,参数,变量,算术扩展和命令替换(以从左到右的方式完成),单词拆分和文件名扩展。
当shell扩展{0..$num}
(大括号扩展)时,$num
尚未扩展(可变扩展)。序列表达式a..b
需要a
和b
作为数字来生成序列,但是这里我们有一个数字和一个非数字(文字字符串$num
) 。如果做不到这一点,shell会回归到字面上解释{0..$num}
。然后变量扩展接管,最后我们得到{0..12}
答案 1 :(得分:2)