我在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
但这不是重点。为什么我的第一种方法不起作用?
答案 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++))