Matriz de script Bash con y sin valores

Matriz de script Bash con y sin valores

Tengo un par de variables a, b y c.

En un bucle for quería mostrar todos sus valores.

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

Ahora los valores se desplazan hacia arriba ya que otros valores en la variable c están intencionalmente vacíos.

mammals land elephant
reptile water pigeon
birds air

¿Cómo creo una variable vacía para que los valores no se desplacen?

Intenté hacerlo si la cadena coincide con "agua", entonces solo hará eco a y 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

Respuesta1

¿Estás buscando algo así?

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

La salida es

$ bash arr.sh 
        d       g
b               h
c       f

Usé cadenas vacías para marcar los valores "faltantes" en la diagonal. En la tarea compuesta, no es posible saltarse un índice, tiene que haber algo ahí. Por supuesto, puedes usar a[1]=b a[2]=cy dejar a[0]sin asignar o explícitamente unset a[0].

Si necesita una matriz bidimensional adecuada, es posible que desee utilizar un lenguaje de programación adecuado y no el shell... Algún tipo de solución podría ser utilizar matrices asociativas con claves como 2-3, con los dos índices delimitados por alguna cadena. Pero depende de lo que estés haciendo realmente.

(En su último fragmento, está usando $csin índice (obteniendo lo mismo que ${c[0]}y luego usando un índice EMPTY, aunque solo le asignó un valor).

información relacionada