使用多个数组的bash脚本

问题描述 投票:0回答:2

我想在一个包含两个数组的for循环内运行多个命令。换句话说,我需要一个嵌套的for循环,该循环将通过以下过程执行命令:

  1. 回声一声
  2. echo 8df6
  3. 回声二
  4. echo b4c2
  5. 回声三
  6. 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;

谢谢。

bash
2个回答
0
投票

如果检查代码的输出,您会注意到彼此之间有2个for循环会导致第一个for循环的每次迭代都运行嵌套的for循环。

因此,在每个number之后,您将打印所有numberids

您的目标是同时打印numbernumberid。因此,您想遍历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;

0
投票

在这种情况下,一个循环就足够了:

#!/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[@]}"
#...............^
© www.soinside.com 2019 - 2024. All rights reserved.