Matriz de script Bash com e sem valores

Matriz de script Bash com e sem valores

Eu tenho algumas variáveis ​​a , b e c.

Em um loop for, eu queria exibir todos os seus valores.

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

Agora os valores são deslocados para o topo, pois outros valores na variável c estão intencionalmente vazios.

mammals land elephant
reptile water pigeon
birds air

Como crio uma variável vazia para que os valores não sejam alterados?

Eu tentei fazer se a string correspondesse a "água", então ela ecoaria apenas a e 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

Responder1

Você está procurando algo parecido com isto?

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

A saída é

$ bash arr.sh 
        d       g
b               h
c       f

Usei strings vazias para marcar valores "ausentes" na diagonal. Na atribuição composta não é possível pular um índice, tem que haver algo ali. É claro que você poderia usar a[1]=b a[2]=ce deixar a[0]unassigned ou explicitamente unset a[0].

Se você precisar de uma matriz bidimensional adequada, talvez queira usar uma linguagem de programação adequada e não o shell ... Algum tipo de solução alternativa seria usar matrizes associativas com chaves como 2-3, com os dois índices delimitados por alguma string. Mas depende do que você realmente está fazendo.

(No seu último trecho, você está usando $csem um índice (obtendo o mesmo que ${c[0]}e depois usando um índice em EMPTY, mesmo que tenha atribuído apenas um valor a ele).

informação relacionada