В Bash, если задана только переменная, содержащая имя ассоциативного массива,
$ declare -A dict=([abc]=125 [def]=456)
$ dictvar="dict"
как мы можем получить ключи и значения ассоциативного массива?
В Bash, если задана только переменная, содержащая имя ассоциативного массива,
$ declare -A dict=([abc]=125 [def]=456)
$ dictvar="dict"
как мы можем получить ключи и значения ассоциативного массива?
В Bash, чтобы получить ключи ассоциативного массива косвенным путем, учитывая имя массива в переменной dictvar
, можно использовать declare
или local
(исходный источник):
$ declare -a 'keys=("${!'"$dictvar"'[@]}")' # or 'local'
Затем, чтобы получить значения
$ for key in ${keys[@]}; do
$ value_var="${dictvar}[$key]"
$ echo "$key = ${!value_var}"
$ done
Альтернатива с использованием eval
предлагается в этом ответе.
Согласно этому ответу, в Bash 4.3+ эту задачу намного проще выполнить благодаря новому declare -n
, который может "решать" имя переменной в реальную переменную.