我有一个数组,当它调用函数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
答案 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