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

时间:2018-10-31 14:27:25

标签: bash shell loops nested

所以,我有两个数组:

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]}一样获取它。

1 个答案:

答案 0 :(得分:3)

您正在遍历数组的

如果需要,可以使用"${!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