Bash循环和函数参数扩展

时间:2012-02-08 08:30:23

标签: bash for-loop

我在bash脚本中有一个简单的for循环,它无法正常工作,我看不出有什么问题。

#!/bin/bash
function deleteOut {

for index in {0..$1}
do
    echo "/bin/rm -rf ./OUT/Message_${index}.log"
    /bin/rm -rf ./OUT/Message_${index}.log
done
}

并使用

调用它
  

deleteOut 5

我期待像

这样的循环
    /bin/rm -rf ./OUT/Message_0.log
    /bin/rm -rf ./OUT/Message_1.log
    /bin/rm -rf ./OUT/Message_2.log
    /bin/rm -rf ./OUT/Message_3.log
    /bin/rm -rf ./OUT/Message_4.log
    /bin/rm -rf ./OUT/Message_5.log

相反,我得到了

/bin/rm -rf ./OUT/Message_{0..5}.log 

我已经解决了这样的问题

find ./OUT -name "Message_*.log" | xargs /bin/rm 

但这不是重点。为什么我的第一种方法不起作用?

2 个答案:

答案 0 :(得分:2)

使用eval或子shell

在变量扩展

之前,支持扩展
 for index in $(eval "echo {0..$q}")
 do 
     echo $index
 done

答案 1 :(得分:1)

您可以使用seq,这通常比eval更安全:

for index in $(seq $1)

甚至更快without any external program

for ((index=1; index<=$1; index++))