Opierając się na tablicy asocjacyjnej w skrypcie Bash, muszę iterować, aby uzyskać klucz i wartość.
#!/bin/bash
declare -A array
array[foo]=bar
array[bar]=foo
Właściwie nie rozumiem, jak zdobyć klucz podczas korzystania z pętli for-in.
Opierając się na tablicy asocjacyjnej w skrypcie Bash, muszę iterować, aby uzyskać klucz i wartość.
#!/bin/bash
declare -A array
array[foo]=bar
array[bar]=foo
Właściwie nie rozumiem, jak zdobyć klucz podczas korzystania z pętli for-in.
for i in a,b c_s,d ; do KEY=${i%,*}; VAL=${i#*,}; echo $KEY" XX "$VAL; done
Odpowiedzi:
Dostęp do kluczy można uzyskać za pomocą wykrzyknika: dostęp
${!array[@]}
do wartości można uzyskać za pomocą${array[@]}
.Możesz iterować po parach klucz / wartość w następujący sposób:
Zwróć uwagę na użycie cudzysłowu wokół zmiennej w
for
instrukcji (plus użycie@
zamiast zamiast*
). Jest to konieczne w przypadku, gdy dowolny klawisz zawiera spacje.Zamieszanie w drugiej odpowiedzi wynika z faktu, że twoje pytanie zawiera „foo” i „bar” zarówno dla kluczy, jak i wartości.
źródło
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
. Zobacz BashFAQ / 006, aby uzyskać ważne informacje.Możesz uzyskać dostęp do klawiszy za pomocą
${!array[@]}
:Następnie iteracja par klucz / wartość jest łatwa:
źródło
Użyj tej funkcji wyższego rzędu, aby zapobiec piramidie zagłady
przykład:
źródło
źródło