Basado en una matriz asociativa en un script Bash, necesito iterar sobre él para obtener la clave y el valor.
#!/bin/bash
declare -A array
array[foo]=bar
array[bar]=foo
En realidad, no entiendo cómo obtener la clave mientras uso un bucle for-in.
for i in a,b c_s,d ; do KEY=${i%,*}; VAL=${i#*,}; echo $KEY" XX "$VAL; done
Respuestas:
Se accede a las claves mediante un signo de exclamación: se accede a
${!array[@]}
los valores mediante${array[@]}
.Puede iterar sobre los pares clave / valor de esta manera:
Tenga en cuenta el uso de comillas alrededor de la variable en la
for
declaración (más el uso de en@
lugar de*
). Esto es necesario en caso de que alguna clave incluya espacios.La confusión en la otra respuesta proviene del hecho de que su pregunta incluye "foo" y "bar" tanto para las claves como para los valores.
fuente
array=(${!hash[@]})
array=("${!hash[@]}")
for i in "${!$1[@]}"
?declare -A aa; aa['A']=a1; aa['B']=b2; aa['C']=c3; foo () { declare -n assoc=$1; for key in "${!assoc[@]}"; do echo "Key: $key; Value: ${assoc[$key]}"; done; }; foo aa
. Consulte BashFAQ / 006 para obtener información importante.Puede acceder a las teclas con
${!array[@]}
:Luego, iterar sobre los pares clave / valor es fácil:
fuente
Usa esta función de orden superior para evitar la pirámide de la fatalidad
ejemplo:
fuente
fuente