Подтвердить что ты не робот

Bash адресация косвенного массива?

Предположим, что у меня есть несколько массивов bash:

A1=(apple trees)
A2=(building blocks)
A3=(color television)

И индекс J=2, как получить содержимое массива A2?

4b9b3361

Ответ 1

Я уже нашел разрешение, это можно сделать:

$ Aref=A$J
$ echo ${!Aref}
building
$ Aref=A$J[1]
$ echo ${!Aref}
blocks
$ Aref=A$J[@]
$ echo "${!Aref}"
building blocks

Ответ 2

Стоит отметить, что даже индекс будет заменен во время вычисления переменной:

$ A2=(building blocks)
$ Aref=A2[index]
$ index=1
$ echo "${!Aref}"
blocks

Ответ 3

Сегодня (с bash 4.3 и более поздними версиями) наилучшей практикой является использование nameref поддержка:

A1=(apple trees)
A2=(building blocks)
A3=(color television)
J=2

declare -n A="A$J"
printf '%q\n' "${A[@]}"

... будет правильно излучать:

building
blocks

Это также доступно как nameref A="A$J" на ksh93. Подробнее см. BashFAQ # 6.