Я давно борюсь с этой проблемой и, похоже, не могу найти работающего решения.
Предположим, я объявил два ассоциативных массива.
declare -A FOO_ARRAY=(
[a]="first"
[b]="second"
[c]="third"
)
declare -A BAR_ARRAY=(
[a]="first"
[b]="second"
[c]="third"
)
Iможно получить список ключей следующим образом:
$ echo ${!FOO_ARRAY[@]}
c b a
$ echo ${!BAR_ARRAY[@]}
c b a
Я также могу динамически извлекать ключ из массива, выполнив что-то вроде этого:
for KEY in FOO BAR
do
temp="${KEY}_ARRAY[a]"
echo ${!temp}
done
Однако, если вы заметите, чтоОператор для динамической ссылки на переменные также является тем же, чтобы получить список ключей из ассоциативного массива, как я мог сделать что-то подобное для того, чтобы динамически перечислять ключи в ассоциативном массиве?
Наивный пример, подобныйэто приводит к ошибке invalid variable name
.
$ export NAME=foo
$ export temp="\!${NAME^^}_ARRAY[@]"
$ echo ${!temp}
bash: \!FOO_ARRAY[@]: invalid variable name
Я ищу способ динамического возврата списка ключей из ассоциативного массива, как если бы приведенный выше пример кода вернул:
c b a