一尘不染

如何在bash中使用变量进行循环

linux

如何在bash for循环中使用变量?如果我只是使用标准的for循环,它会达到我的期望

for i in {0..3}
do
   echo "do some stuff $i"
done

这很好。它循环遍历4次,包括0到3,包括打印我的消息并将计数放在末尾。

do some stuff 0
do some stuff 1
do some stuff 2
do some stuff 3

当我使用以下for循环尝试相同的操作时,它似乎等于一个字符串,这不是我想要的。

length=3
for i in {0..$length}
do
   echo "do something right $i"
done

输出:

do something right {0..3}

我试过了

for i in {0.."$length"} and for i in {0..${length}} (both output was {0..3})

for i in {0..'$length'} (output was {0..$length})

他们俩都不做我所需要的。希望有人可以帮助我。预先感谢bash专家对for循环的帮助。


阅读 502

收藏
2020-06-07

共1个答案

一尘不染

一种方法是使用eval

for i in $( eval echo {0..$length} )
do
       echo "do something right $i"
done

请注意 设置length=;lslength=; rm *(但不要尝试使用后者)时会发生什么。

安全地 ,使用seq

for i in $( seq 0 $length )
do
       echo "do something right $i"
done

或者您可以使用c样式的for循环,这也是安全的:

for (( i = 0; i <= $length; i++ )) 
do 
       echo "do something right $i"
done
2020-06-07