Как косвенно получить ключи и значения ассоциативного массива в Bash?

В Bash, если задана только переменная, содержащая имя ассоциативного массива,

$ declare -A dict=([abc]=125 [def]=456)
$ dictvar="dict"

как мы можем получить ключи и значения ассоциативного массива?


person alexei    schedule 09.10.2014    source источник


Ответы (1)


В 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, который может "решать" имя переменной в реальную переменную.

person alexei    schedule 09.10.2014