具有动态数组大小的'for'循环

时间:2016-03-11 17:24:18

标签: bash

我有一个数组,当它调用函数findVar时会添加元素。问题似乎是在for循环中,一旦开始运行就不会更新元素的数量。

当我在for循环结束时回显时,我得到了正确数量的元素和最后一个元素,但似乎没有在启动后检查for条件。

for var in "${tempV[@]}"
do
    num_words=${#tempV[@]}
    let i=i+1
    if ! [ $i -gt $num_words ]
    then
        findVar $objBKP $var
    fi
done

2 个答案:

答案 0 :(得分:3)

您的尝试是循环遍历数组中的每个原始元素,然后确保您没有多次循环并调用您的函数。

这不起作用,因为tempV的原始扩展只发生一次,因此从未看到添加的条目。但这也没有意义,因为根据定义,如果你循环遍历数组的元素,你可以循环更多次,那么元素中的元素。 / p>

你想要做什么(假设一个非稀疏的,整数索引的数组附加到)正在以数字方式循环并检查你没有超过数组大小循环条件。

像这样(未经测试):

i=0
while [ "$i" -lt "${#tempV[@]}" ]; do
    var=${tempV[i]}
    findVar "$objBKP" "$var"
    i=$((i + 1))
done

答案 1 :(得分:2)

您不会将$i用于迭代计数器以外的任何其他内容。在您发布的示例中完全没有必要。相反,只需迭代变量扩展的内容。例如:

for var in "${tempV[@]}"; do
    findVar "$objBKP" "$var"
done