В 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
, который может «разрешить» имя переменной в фактическую переменную.