bash数组未使用新分配进行更新

问题描述 投票:0回答:2

下面是我试过的代码

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

请告知为什么新值不能更新,只有在代码运行后才能更新

arrays bash
2个回答
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

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

但最后,不建议尝试在其中更改循环范围。

© www.soinside.com 2019 - 2024. All rights reserved.