Bash-Scripting: что означает ${VARIABLE[число]}, если VARIABLE не является массивом?
Я знаю, что в bash-скриптинге есть массивы. Например:
JOBS=("JOB1", "JOB2", "JOB3")
Тогда можно сослаться, скажем, на JOB2 следующим образом:
${JOBS[1]}
В скрипте bash я недавно встретил обычную (не массивную) переменную:
JOB="XYZ"
Позже в скрипте эта переменная упоминалась следующим образом:
${JOB[0]}
а также:
${JOB[1]}
Поскольку JOB не является массивом, я не понимаю, для чего расширен ${JOB[число]}.
Это просто ошибка программирования? Или есть какая-то конструкция относительно нормальных переменных, о которой я не знаю?
2 ответа
bash
не имеет значений массива вообще; он предоставляет синтаксис массива для использования с именами, которые имеют array
набор атрибутов:
$ a=()
$ declare -p a
declare -a a=()
-a
в выводе указывает, что array
атрибут установлен на a
, будучи неявно установленным предыдущим присвоением массива.
Для таких переменных имя-плюс-индекс действует как своего рода "виртуальное" имя и, как и любое другое имя, расширяется до пустой строки, если имя на самом деле не существует, как в случае с ${JOB[1]}
, Побочным эффектом реализации является $foo
а также ${foo[0]}
как правило, эквивалентны, независимо от того, foo
имеет свой атрибут массива установлен.
Я считаю, что более новые версии Bash поддерживают одномерные массивы, а синтаксис можно увидеть по следующей ссылке: Расширенное руководство по написанию сценариев Bash
Если Variable не является массивом, ${Variable[Number]} будет работать только для Number=0, но не для любого другого числа, как ${Variable[0]} и $Variable - оба одинаковы.