以下是我尝试过的代码
app+=(0)
top+=(1 2 3 4 5)
for i in ${app[@]}
do
echo $i th time
app=${top[@]}
done
输出
(09:01:12)-> ./loop.sh
0 th time
请建议为什么新值不能更新 只有在代码运行时
答案 0 :(得分:1)
我不知道你真正想做什么,但你可以修改它以满足你的需要:
app+=(0)
top+=(1 2 3 4 5)
for ((i=0; i<${#app[@]};++i)); do
echo "$i" th time, "${app[i]}" element
app=(${top[@]})
done
给出:
0 th time, 0 element
1 th time, 2 element
2 th time, 3 element
3 th time, 4 element
4 th time, 5 element
答案 1 :(得分:0)
在您的代码中,${app[@]}
仅展开一次,因此与for i in 0
没有区别。循环开始后,您无法修改循环范围。你最好的选择可能是使用其他一些技巧,如
ind=0
loop() {
eval $1=${app[$ind]}
(( ind++ ))
return 0
}
while loop i
do
# Now you can modify $app
done
但最后,不建议在此期间尝试更改循环范围。