所以,我有两个数组:
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]}
一样获取它。
答案 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