如何在bash中动态迭代数组

Fat*_*ebi 1 linux arrays bash shell

我的脚本中有一个数组,我想在其中使用它,如下所示:

for j in "${list[@]}"
do
    func $j
done
Run Code Online (Sandbox Code Playgroud)

在函数func中,有时候另一个成员会添加到列表数组中,但for迭代的时间与启动时间一样多(在for)之前
我希望"for"根据更新的数组内容迭代

该函数的某些行:

if [ $s1 -gt 0 ]
then
   (( k = $k +1 ))
    list[$k]=$id2
fi
Run Code Online (Sandbox Code Playgroud)

Gor*_*son 5

正如Eric Renouf所说,修改你正在处理的列表可能会很棘手.只要您只添加新元素(到列表末尾),并且只想在迭代中包含这些新元素,您就可以使用以下内容:

for ((i=0; i<${#list[@]}; i++)); do
    #...
    if (( s1 > 0 )); then
        list+=( "$id2" )
    fi
done
Run Code Online (Sandbox Code Playgroud)

由于${#list[@]}每次都会重新计算list()的长度,因此循环将包含新元素.此外,+=( )语法保证您始终严格附加.