Basé sur un tableau associatif dans un script Bash, j'ai besoin d'itérer dessus pour obtenir la clé et la valeur.
#!/bin/bash
declare -A array
array[foo]=bar
array[bar]=foo
En fait, je ne comprends pas comment obtenir la clé lors de l'utilisation d'une boucle for-in.
for i in a,b c_s,d ; do KEY=${i%,*}; VAL=${i#*,}; echo $KEY" XX "$VAL; done
Réponses:
Les clés sont accessibles à l'aide d'un point d'exclamation:,
${!array[@]}
les valeurs sont accessibles à l'aide de${array[@]}
.Vous pouvez parcourir les paires clé / valeur comme ceci:
Notez l'utilisation de guillemets autour de la variable dans l'
for
instruction (plus l'utilisation de@
au lieu de*
). Cela est nécessaire dans le cas où des clés contiennent des espaces.La confusion dans l'autre réponse vient du fait que votre question comprend "foo" et "bar" pour les clés et les valeurs.
la source
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
. Veuillez consulter BashFAQ / 006 pour des informations importantes.Vous pouvez accéder aux clés avec
${!array[@]}
:Ensuite, itérer sur les paires clé / valeur est facile:
la source
Utilisez cette fonction d'ordre supérieur pour empêcher la pyramide de malheur
exemple:
la source
la source