Ответ 1
Я уже нашел разрешение, это можно сделать:
$ Aref=A$J
$ echo ${!Aref}
building
$ Aref=A$J[1]
$ echo ${!Aref}
blocks
$ Aref=A$J[@]
$ echo "${!Aref}"
building blocks
Предположим, что у меня есть несколько массивов bash
:
A1=(apple trees)
A2=(building blocks)
A3=(color television)
И индекс J=2
, как получить содержимое массива A2
?
Я уже нашел разрешение, это можно сделать:
$ Aref=A$J
$ echo ${!Aref}
building
$ Aref=A$J[1]
$ echo ${!Aref}
blocks
$ Aref=A$J[@]
$ echo "${!Aref}"
building blocks
Стоит отметить, что даже индекс будет заменен во время вычисления переменной:
$ A2=(building blocks)
$ Aref=A2[index]
$ index=1
$ echo "${!Aref}"
blocks
Сегодня (с 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.