我想知道是否可以用变量写“for i in {n..k}
”循环。
例如;
for i in {1..5}; do
echo $i
done
此输出
1
2
3
4
5
另一方面
var=5
for i in {1..$var}; do
echo $i
done
打印
{1..5}
如何使第二个代码与第一个代码一样运行?
P.S。我知道有很多方法可以通过使用变量来创建循环,但我想特别询问这种语法。
答案 0 :(得分:6)
无法在{N..M}
语法中使用变量。相反,您可以使用seq
:
$ var=5
$ for i in $(seq 1 $var) ; do echo "$i"; done
1
2
3
4
5
或者...
$ start=3
$ end=8
$ for i in $(seq $start $end) ; do echo $i; done
3
4
5
6
7
8
答案 1 :(得分:2)
虽然seq
很好,但如果$var
的值非常大,则可能会导致问题,因为需要生成整个值列表,如果生成的命令行是太长。 bash
也有一个C风格的for循环,它没有显式生成列表:
for ((i=1; i<=$var; i++)); do
echo "$i"
done
(这也适用于常量序列,因为{1..10000000}
也会生成一个非常大的列表,可能会溢出命令行。)
答案 2 :(得分:1)