Основываясь на ассоциативном массиве в скрипте Bash, мне нужно перебрать его, чтобы получить ключ и значение.
#!/bin/bash
declare -A array
array[foo]=bar
array[bar]=foo
Я на самом деле не понимаю, как получить ключ при использовании цикла for-in.
for i in a,b c_s,d ; do KEY=${i%,*}; VAL=${i#*,}; echo $KEY" XX "$VAL; done
Ответы:
Ключи доступны с помощью восклицательного знака:
${!array[@]}
, то значения доступны при использовании${array[@]}
.Вы можете перебирать пары ключ / значение следующим образом:
Обратите внимание на использование кавычек вокруг переменной в
for
выражении (плюс использование@
вместо*
). Это необходимо в случае, если какие-либо ключи содержат пробелы.Путаница в другом ответе связана с тем, что ваш вопрос включает в себя «foo» и «bar» как для ключей, так и для значений.
источник
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
. Пожалуйста, смотрите BashFAQ / 006 для получения важной информации.Вы можете получить доступ к ключам с помощью
${!array[@]}
:Затем легко выполнить итерации по парам ключ / значение:
источник
Используйте эту функцию более высокого порядка, чтобы предотвратить пирамиду гибели
пример:
источник
источник