是否可以在bash中使用变量in语法?

时间:2013-07-22 12:32:40

标签: bash variables syntax

我想知道是否可以用变量写“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。我知道有很多方法可以通过使用变量来创建循环,但我想特别询问这种语法。

3 个答案:

答案 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)

您可以使用eval

$ num=5
$ for i in $(eval echo {1..$num}); do echo $i; done
1
2
3
4
5

请在使用前阅读eval的缺点。