我有两个 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[@]}
的列表。这里可以使用它,因为我们假设和都具有完全相同的索引,因为它们是用相同数量的元素定义的。理论上,数组可以具有不同的长度,甚至在它们之间有“空洞”,即未分配的索引,但这里的情况并非如此,所以我们不关心它。[@]
!
arr1
arr1
arr2
$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