Массив скриптов Bash со значениями и без них

Массив скриптов Bash со значениями и без них

У меня есть пара переменных a, b и c.

В цикле for мне хотелось отобразить все их значения.

for i in ${!a[@]}; do
  echo "${a[$i]} ${b[$i]} ${c[$i]}"
done

Теперь значения смещены наверх, поскольку другие значения в переменной c намеренно пусты.

mammals land elephant
reptile water pigeon
birds air

Как создать пустую переменную, чтобы значения не смещались?

Я пробовал сделать так, если строка соответствует «воде», то будут выведены только буквы a и b.

for i in ${!a[@]}; do
  if [ "$c" = "water"]; then
  echo "${a[$i]} ${b[$i]}"
  else
  echo "${a[$i]} ${b[$i]} ${c[$i]}"
  fi
done

решение1

Вы ищете что-то подобное?

a=("" b c)
b=(d "" f)
c=(g h "")

for i in ${!a[@]}; do
  printf "%s\t" "${a[$i]}" "${b[$i]}" "${c[$i]}"
  echo          
done

Выходной сигнал:

$ bash arr.sh 
        d       g
b               h
c       f

Я использовал пустые строки, чтобы отметить "отсутствующие" значения на диагонали. В составном присваивании невозможно пропустить индекс, там должно быть что-то. Конечно, вы могли бы использовать a[1]=b a[2]=cи оставить a[0]неназначенным вместо этого, или явно unset a[0].

Если вам нужен правильный двумерный массив, вы можете использовать правильный язык программирования, а не оболочку... Неким обходным решением может быть использование ассоциативных массивов с ключами типа 2-3, с двумя индексами, разделенными некоторой строкой. Но это зависит от того, что вы на самом деле делаете.

(В вашем последнем фрагменте вы используете $cбез индекса (получая то же самое, что и ${c[0]}, а затем используете индекс для EMPTY, хотя вы присвоили ему только одно значение.)

Связанный контент