我有两个 for 循环:
for i in 0 1 2 3; do echo $i;done
for j in a b c d; do echo $j;done
0
1
2
3
a
b
c
d
Run Code Online (Sandbox Code Playgroud)
我希望输出是:
0
a
1
b
2
c
3
d
Run Code Online (Sandbox Code Playgroud)
怎么做?
您可以使用要首先迭代的值定义两个长度相同的数组。然后,您可以遍历其中一个数组的索引并在两者中查找它们:
arr1=(0 1 2 3)
arr2=(a b c d)
for i in ${!arr1[@]}; do
echo ${arr1[i]}
echo ${arr2[i]}
done
# Output below:
0
a
1
b
2
c
3
d
Run Code Online (Sandbox Code Playgroud)
定义数组的工作原理是在括号中分配一个元素列表,如前两行所示。
for 循环迭代${!arr1[@]},它返回数组变量的所有 ( [@]) 索引 ( !) 的列表arr1。这可以在这里使用,因为我们假设arr1和arr2具有完全相同的索引,因为它们是用相同数量的元素定义的。理论上,数组可能有不同的长度,甚至可能有“空洞”,即中间有未分配的索引,但两者都不是这里的情况,所以我们不关心它。
访问在由变量的值所限定的位置的阵列的特定元件值$i通过打字的工作原理${arr1[i]}。