2017-05-09 66 views
1

下面的循环给了我5喜:具有可变

for i in {1..5} ; 
do 
echo hi $i 
done 

但是当我做变量下面,它不会:

num=5 
for i in {1..$num} ; 
echo hihi $i 
done 

,我试图把一些“”或或'',但它仍然不给我5嗨,请给我一些建议。结果返回值是{1 .. $ num},所以请告诉我如何为变量设置适当的情况。谢谢。

+2

变量扩展发生在花括号之后,所以你不能在里面使用它们。如果你想使用变量,你可以使用seq。即'对于我$(seq 1 $ num)' – 123

+1

不要使用'seq';它比C风格的'for'循环更不如标准,也没有标准。 – chepner

回答

2

问题是括号展开参数扩展发生了,所以,你希望它是变量也不会被展开。

使用适当C风格for-loop

for ((i=1; i<=num; i++)); do 

man bash页,下EXPANSION部分已拆分成词之后的命令行上执行

扩展

扩展。有七种扩展执行。

扩展的顺序是:brace expansion; tilde expansionparameter and variable expansionarithmetic expansion,和command substitution(在左到右的方式进行); word splitting;和 pathname expansion

+2

或'seq 1 $ num' – heemayl

+0

@heemayl虽然需要一个子shell,所以C for循环是probs最好的解决方案。 – 123