Bash адресация косвенного массива? Предположим, что у меня есть несколько массивов bash: A1=(apple trees) A2=(building blocks) A3=(color television) И индекс J=2, как получить содержимое массива A2? Ответ 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.
Ответ 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.