我想知道是否可以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}
如何使第二个代码与第一个代码一样运行?
ps 我知道有很多方法可以通过使用变量来创建循环,但我想具体询问一下这种语法。
不能在{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
虽然seq
很好,但如果 的值$var
非常大,可能会导致问题,因为需要生成整个值列表,如果生成的命令行太长,可能会导致问题。bash
还有一个 C 风格的 for 循环,它不会显式生成列表:
for ((i=1; i<=$var; i++)); do
echo "$i"
done
(这也适用于常量序列,因为{1..10000000}
还会生成一个非常大的列表,可能会溢出命令行。)