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 - оба одинаковы.

Другие вопросы по тегам