Shell脚本-数组迭代无法正常工作-嵌套用于循环



所以,我有两个数组:

arr1=("A" "C" "E")
arr2=("B" "D" "F")

我有这样的嵌套循环:

for i in $(seq 1 $numberOfYears); 
do
echo "$i"
for j in "${arr1[@]}";
do
echo ${arr1[j]} <---Keeps printing "A" 
echo ${arr2[j]} <---Keeps printing "B" 
done
done

编程shell脚本的新手。是什么导致内部for循环正确地遍历array1当你引用像这样的元素时:$j,但不是像这样的${arr1[j]}${arr2[j]}。。?在所有在我的阅读/搜索中,这应该会正确地遍历这两个数组。

我的预期结果:

预期

1ABCDEF
2ABCDEF
3ABCDEF

实际

1ABABAB
2ABABAB
3ABABAB

如果我将${arr1[j]}更改为$j,它可以正常工作,但我也需要获得arr2的元素,所以我必须像${arr2[j]}一样获得它。

您正在循环数组的

如果需要,可以使用"${!arr1[@]}"(添加!(循环键:

for i in $(seq 1 $numberOfYears); 
do
echo "$i"
for j in "${!arr1[@]}";
do
echo ${arr1[j]}
echo ${arr2[j]}
done
done

否则,您将展开像${arr1["A"]}这样的参数,并且由于这些键没有定义,因此您将获得数组的第一个元素。

顺便说一句,您还可以使用不同风格的循环来迭代数字键:

for (( i = 0; i <= numberOfYears; ++i ))
do
echo "$i"
for (( j = 0; j < ${#arr1[@]}; ++j ))
do
echo "${arr1[j]}"
echo "${arr2[j]}"
done
done

最新更新