for 循环输出的同步组合

for 循环输出的同步组合

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

我想要的输出是:

0
a
1
b
2
c
3
d

怎么做?

答案1

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

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

定义数组是通过在括号中分配元素列表来实现的,如前两行所示。

for 循环遍历,返回数组变量 的所有 ( ) 索引 ( )${!arr1[@]}的列表。这里可以使用它,因为我们假设和都具有完全相同的索引,因为它们是用相同数量的元素定义的。理论上,数组可以具有不同的长度,甚至在它们之间有“空洞”,即未分配的索引,但这里的情况并非如此,所以我们不关心它。[@]!arr1arr1arr2

$i通过键入 可以访问由变量值定义的位置处的数组的特定元素值${arr1[i]}

答案2

另一种可能是使用关联数组(又名哈希又名字典),然后对其进行迭代并分别检索键和值:

#!/usr/bin/env bash

declare -A items=( 
    [0]=a 
    [1]=b
    [2]=c
    [3]=d
    [four]=eeh
);

for key in "${!items[@]}"; do
    echo "key  : $key";
    echo "value: ${items[$key]}";
done

输出

key  : 0
value: a
key  : 1
value: b
key  : 2
value: c
key  : 3
value: d
key  : four
value: eeh

相关内容