我想在一个包含两个数组的for循环内运行多个命令。换句话说,我需要一个嵌套的for循环,该循环将通过以下过程执行命令:
echo 9fad
下面是一些尝试过的代码,但是无法应用所需的代码。
#!/bin/bash
numbers=(one two three)
numbersid=(8df6 b4c2 9fad)
for m in "${numbers[@]}"
do
echo "${m}";
for n in "${numbersid[@]}"
do
echo "${n}" ;
done
done;
谢谢。
如果检查代码的输出,您会注意到彼此之间有2个for
循环会导致第一个for
循环的每次迭代都运行嵌套的for
循环。
因此,在每个number
之后,您将打印所有numberids
。
您的目标是同时打印number
和numberid
。因此,您想遍历number
数组的长度。然后打印number
及其id
。
您可以通过以下方式实现。
#!/bin/bash
numbers=(one two three)
numbersid=(8df6 b4c2 9fad)
len_numbers=${#numbers[@]}
for (( i=0; i<$len_numbers; i++ ));
do
echo "${numbers[i]}";
echo "${numbersid[i]}";
done;
在这种情况下,一个循环就足够了:
#!/bin/bash
numbers=(one two three)
numbersid=(8df6 b4c2 9fad)
for index in 0 1 2
do
echo ${numbers[$index]}
echo ${numbersid[$index]}
done
给予:
one
8df6
two
b4c2
three
9fad
您可以使索引列表适应numbers数组的长度,如下所示:
for index in $(seq 0 $((${#numbers[@]} - 1)))
说明:
seq 0 2
将产生0 1 2
] >>${#numbers[@]}
产生numbers数组中的元素数;因此3$((3 - 1))
=数学= 2或者,bash可以帮助您提取数组的索引:
for index in "${!numbers[@]}"
#...............^