如何在 for 循环数字中使用变量?
例如:
num="12"
for i in {0..$num}; do
...
done
带有变量的大括号扩展并不像人们期望的那样工作(参见附录 B了解更多详细信息),即{0..$num}
只会{0..12}
按字面意思返回而不是数字列表。
试试seq
这样:
num="12"
for i in $(seq 0 $num); do
echo $i
done
bash手册说,
扩展的顺序是:大括号扩展、波浪号扩展、参数、变量和算术扩展和命令替换(以从左到右的方式完成)、分词和文件名扩展。
当时 shell 扩展{0..$num}
(大括号扩展),$num
尚未扩展(变量扩展)。序列表达式a..b
需要a
和b
都是数字来生成序列,但这里我们有一个数字和一个非数字(文字字符串$num
)。如果做不到这一点,shell 就会退回到{0..$num}
字面解释。然后变量展开接管,最后我们得到{0..12}
Bash
在变量扩展之前做大括号扩展 ,所以你会得到像. 随着使用,你可以得到它的工作。 {1..12}
eval
$ num=5
$ for i in {1..$num}; do echo "$i"; done
{1..5}
$ for i in $(eval echo {1..$num}); do echo "$i"; done
1
2
3
4
5
请注意: eval
是变相的邪恶。