
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]=c
y 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 $c
sin índice (obteniendo lo mismo que ${c[0]}
y luego usando un índice EMPTY
, aunque solo le asignó un valor).