for循环中的嵌套函数似乎没有按预期工作。迭代一次后循环中断
# copy files
copyFiles () {
for (( i=0; i<${#filetype[@]}; ++i )); do
//some code goes here
done
}
# copy common components
copyComponents () {
copyFiles $1
}
for (( i=0; i<3; ++i )); do
echo $i //iterates only once.. expectation is thrice
case $1 in
components)
copyComponents $module;;
*)
echo "unknown type"
esac
done
我不确定我做错了什么但是在迭代一次后循环退出。
答案 0 :(得分:2)
问题是shell中的所有变量都是全局变量,除非另有声明。这是一个更简单的例子来说明这一点:
func () {
for ((i=0; i<10; ++i)); do
echo "func: $i"
done
}
for ((i=0; i<5; ++i)); do
echo "Loop: $i"
func
done
echo "$i"
如果你运行,你会看到第一次执行func
后,全局变量i
的值为11,这会导致外循环退出。要在bash
中修复此问题,您可以确保函数中的循环计数器保持在本地。
copyFiles () {
local i
for (( i=0; i<${#filetype[@]}; ++i )); do
# some code goes here
done
}