for循环输出的同步组合

Jos*_*muk 1 command-line bash

我有两个 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)

怎么做?

Byt*_*der 5

您可以使用要首先迭代的值定义两个长度相同的数组。然后,您可以遍历其中一个数组的索引并在两者中查找它们:

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。这可以在这里使用,因为我们假设arr1arr2具有完全相同的索引,因为它们是用相同数量的元素定义的。理论上,数组可能有不同的长度,甚至可能有“空洞”,即中间有未分配的索引,但两者都不是这里的情况,所以我们不关心它。

访问在由变量的值所限定的位置的阵列的特定元件值$i通过打字的工作原理${arr1[i]}