我有以下两个关联数组
P=([5]=0 [2]=1 [3]=2)
Q=([4]=0 [1]=5 [1]=3)
我有一个循环,迭代P
中的每个元素和Q
中的每个元素,以将P
中的每个元素与Q
中的所有元素对应,如下所示< / p>
for i in ${!P[@]}; do
for j in ${!Q[@]}; do
echo ${P[i]}
echo "-"
echo ${Q[j]}
echo "-----------"
done
done
预期输出为
1
-
3
-----------
1
-
0
----------- ################# it skips that
1
-
5
----------- #################
2
-
3
-----------
2
-
0
----------- ################# it skips that
2
-
5
----------- #################
0
-
3
-----------
0
-
0
----------- ################# it skips that
0
-
5
----------- #################
但是它会跳过第二个数组5
中的一个元素。
答案 0 :(得分:3)
您是否在数组Q
初始化中实现了错字?您已经用1
索引了数组两次?
Q=([4]=0 [1]=5 [1]=3)
# ^^^ ^^^
因此,该数组的行为将取第二个索引条目的值。因此,数组扩展"${!Q[@]}"
永远不会看到包含值5
declare -p Q
declare -A Q=([1]="3" [4]="0" )
也许您想将数组初始化更改为
Q=([4]=0 [5]=5 [1]=3)
这也很奇怪,您在发布的代码中根本看不到任何输出。因为数组是按索引打印的,所以应该在下标中使用扩展值,即使用"$i"
和"$j"
for i in "${!P[@]}"; do
for j in "${!Q[@]}"; do
echo "${P[$i]}"
echo "-"
echo "${Q[$j]}"
echo "-----------"
done
done