bash скрипт с использованием нескольких массивов - PullRequest
0 голосов
/ 17 января 2020

Я хотел бы запустить несколько команд внутри для l oop, который будет содержать два массива. Другими словами, мне нужно иметь вложенное значение для l oop, которое будет выполнять команды со следующим процессом:

  1. echo one
  2. echo 8df6
  3. echo two
  4. echo b4c2
  5. echo three
  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;

спасибо.

Ответы [ 2 ]

3 голосов
/ 17 января 2020

в этом случае достаточно одного l oop:

#!/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

Обратите внимание, что bash может помочь вам извлечь индексы из массива:

#...............v
for index in "${!numbers[@]}"; do
        echo ${numbers[index]}
        echo ${numbersid[index]}
done
2 голосов
/ 17 января 2020

Если вы проверите вывод для своего кода, вы заметите, что наличие 2 for циклов внутри друг друга приводит к выполнению вложенной for l oop каждой итерации первой for l oop.

Поэтому после каждого number у вас будет все numberids отпечаток.

Ваша цель - печатать number и numberid друг за другом. Итак, вы хотите перебрать всю длину массива number. А затем выведите number и его id.

. Вы можете добиться этого следующим образом.

#!/bin/bash
numbers=(one two three)

numbersid=(8df6 b4c2 9fad)

for i in "${!numbers[@]}"
do
    echo "${numbers[i]}";
    echo "${numbersid[i]}";
done;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...