Bash - командный интерпретатор GNU Bourne

Массивы


Командный интерпретатор bash поддерживает одномерные массивы. Любая переменная может использоваться как массив; встроенная процедура позволяет объявить массив явно. Нет ограничения на рамер массива или требования непрерывности индексов. Массивы индексируются целыми числами, начиная с нуля.

Массив создается автоматически при присваивании любой переменной значения с помощью конструкции имя[индекс]=значение. Индекс обрабатывается как арифметическое выражение, которое должно иметь неотрицательное значение. Для явного объявления массива используется команда declare -a имя

(см. раздел "" ниже). Конструкция declare -a имя[индекс] также поддерживается; индекс просто игнорируется. Для переменной типа массив можно задать атрибуты с помощью встроенных команд и . Атрибут применяется ко всем элементам массива.

Присваивания массивам выполняются с помощью конструкций вида имя=(значение1 ... значениеn), где каждое значение имеет вид [индекс]=строка. Обязательно задавать только строку. Если необязательные квадратные скобки и индекс указаны, присваивание выполняется элементу с соответствующим индексом; в противном случае, в качестве индекса элемента используется индекс последнего элемента, которому было присвоено значение, плюс один. Индексация начинается с нуля. Эту же конструкцию присваивания можно использовать и во встроенной команде . Значения отдельным элементам массива присваиваются с помощью представленной выше конструкции имя[индекс]=значение.

На любой элемент массива можно сослаться с помощью конструкции ${имя[индекс]}. Фигурные скобки необходимы, чтобы избежать конфликтов при подстановке имен файлов. Если в качестве индекса указан символ @ или *, слово заменяется всеми элементами массива с указанным именем. Эти индексы интерпретируются по-разному только если слово указано в двойных кавычках. Если слово указано в двойных кавычках, конструкция ${имя[*]} заменяется одним словом, значение которого строится как значения каждого элемента массива, разделенные первым символом из значения переменной среды IFS, а конструкция ${имя[@]} заменяет каждый элемент массива имя отдельным словом. Когда массив пустой, ${имя[@]} заменяется пустой строкой. Это аналогично замене специальных параметров * и @ (см. подраздел "" выше). Конструкция ${#имя[индекс]} заменяется длиной элемента ${имя[индекс]}. Если в качестве индекса указан символ * или @, подставляется количество элементов массива. Ссылка на переменную-массив без индекса эквивалентна ссылке на элемент с индексом ноль.

Для уничтожения массивов используется встроенная команда . Команда unset имя[индекс] уничтожает элемент массива с указанным индексом. Команда unset name, где name - имя массива, или unset имя[индекс], где индекс - * или @, удаляет весь массив.

Встроенные команды , и воспринимают опцию -a для указания массива. Встроенная команда воспринимает опцию -a

для присваивания массиву списка слов, прочитанных из станадартного входного потока. Встроенные команды и выдают значения массивов так, что их можно повторно использовать в присваиваниях.



Содержание раздела