如何在bash中动态迭代数组

时间:2015-07-25 11:45:56

标签: arrays linux bash shell

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

for j in "${list[@]}"
do
    func $j
done

在函数func中,有时另一个成员将添加到列表数组中,但for迭代的时间与启动时一样多(在启动之前)
我希望“for”基于更新的数组内容进行迭代 这个功能的一些部分:

if [ $s1 -gt 0 ]
then
   (( k = $k +1 ))
    list[$k]=$id2
fi

2 个答案:

答案 0 :(得分:5)

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

${#list[@]}

由于每次重新计算列表的长度(+=( )),循环将包含新元素。此外,ProductConfiguration语法可以保证您始终严格追加。

答案 1 :(得分:1)

k似乎是最后一个元素的索引,这意味着您的函数只会将项目附加到列表的末尾。似乎最好的选择是迭代,而单独的计数器小于k

i=0
while (( i < k )); do
    j=${list[i]}
    func "$j"
    ((i++))
done