Basierend auf einem assoziativen Array in einem Bash-Skript muss ich es durchlaufen, um den Schlüssel und den Wert zu erhalten.
#!/bin/bash
declare -A array
array[foo]=bar
array[bar]=foo
Ich verstehe eigentlich nicht, wie man den Schlüssel erhält, wenn man eine For-In-Schleife verwendet.
for i in a,b c_s,d ; do KEY=${i%,*}; VAL=${i#*,}; echo $KEY" XX "$VAL; done
Antworten:
Auf die Schlüssel wird mit einem Ausrufezeichen zugegriffen: Auf
${!array[@]}
die Werte wird mit zugegriffen${array[@]}
.Sie können die Schlüssel / Wert-Paare folgendermaßen durchlaufen:
Beachten Sie die Verwendung von Anführungszeichen um die Variable in der
for
Anweisung (plus die Verwendung von@
anstelle von*
). Dies ist erforderlich, wenn Schlüssel Leerzeichen enthalten.Die Verwirrung in der anderen Antwort ergibt sich aus der Tatsache, dass Ihre Frage sowohl für die Schlüssel als auch für die Werte "foo" und "bar" enthält .
quelle
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
. Weitere wichtige Informationen finden Sie in BashFAQ / 006 .Sie können auf die Schlüssel zugreifen mit
${!array[@]}
:Das Iterieren über die Schlüssel / Wert-Paare ist dann einfach:
quelle
Verwenden Sie diese Funktion höherer Ordnung, um die Pyramide des Untergangs zu verhindern
Beispiel:
quelle
quelle