2014-10-09 2 views

ответ

3

В Bash, чтобы получить ключи ассоциативного массива с помощью косвенности, учитывая имя массива в переменной dictvar можно использовать declare или local (original source):

$ declare -a 'keys=("${!'"$dictvar"'[@]}")' # or 'local' 

Затем, чтобы получить значения

$ for key in ${keys[@]}; do 
$  value_var="${dictvar}[$key]" 
$  echo "$key = ${!value_var}" 
$ done 

В this answer предлагается альтернатива с использованием eval.

Согласно this answer, в Bash 4.3+ эта задача намного проще выполнить благодаря новому declare -n, который может «разрешить» имя переменной в фактическую переменную.

Смежные вопросы