所以,我有两个数组:
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