Estoy intentando crear una matriz asociativa multidimensional pero necesito ayuda. He revisado the page suggested in this SO answer pero me confundió aún más. Hasta el momento esto es lo que tengo:BASH: necesito ayuda con matrices asociativas multidimensionales
El guión:
#!/bin/bash
declare -A PERSONS
declare -A PERSON
PERSON["FNAME"]='John'
PERSON["LNAME"]='Andrew'
PERSONS["1"]=${PERSON[@]}
PERSON["FNAME"]='Elen'
PERSON["LNAME"]='Murray'
PERSONS["2"]=${PERSON[@]}
for KEY in "${!PERSONS[@]}"; do
TMP="${PERSONS["$KEY"]}"
echo "$KEY - $TMP"
echo "${TMP["FNAME"]}"
echo "${TMP["LNAME"]}"
done
La salida:
1 - John Andrew
John Andrew
John Andrew
2 - Elen Murray
Elen Murray
Elen Murray
Como se puede ver tratando de acceder a un índice específico de la matriz $ TMP en el de loop devuelve toda la matriz.
[Q] ¿Qué debo hacer para acceder por separado a los índices "FNAME" y "LNAME" de la matriz $ TMP dentro del ciclo for
?
Gracias.
Intenté su solución, pero eso no es lo que estoy buscando, ya que cuando recorro $ PERSONAS obtengo estos 4 elementos en el siguiente orden: "1, LNAME = Andrew", "2, FNAME = Elen", "1, FNAME = John" y "2, LNAME - Murray" con los que no puedo trabajar. Todavía estoy desconcertado sobre por qué bash no puede soportar matrices multidimensionales. Al final del día, todo lo que hago es asignar una variable (la matriz $ PERSON) a un elemento de la matriz ($ PERSONS ["X"]). ¿Por qué importaría el tipo de esta variable? ¿Verifica Bash y evita asignar una matriz a un elemento de matriz? – Max
@ user359650, es una decisión de diseño de los desarrolladores de bash. Cito del manual de bash al que hice referencia: "Bash proporciona variables unidimensionales de matriz indexadas y asociativas". Lo que estás haciendo es asignar una cadena ("John Andrew") a un índice de matriz. Creo que debes volver a mirar lo que estás haciendo: si absolutamente debes tener matrices multidimensionales, estás usando la herramienta incorrecta para el trabajo. –
Además, las matrices asociativas no tienen un orden particular. –