`

Массивы в Bash

Определение массивов в Bash

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

Для объявления массива необходимо придумать имя идентификатора и указать в круглых скобках () список принимаемых значений. Значения с пробелом необходимо заключать в кавычки.

В любой момент времени можно получить одно или несколько значений массива используя его идентификатор и индекс элемента указанных в квадратных скобках []. Индексация элементов начинается с нуля.

meliorem@ubuntu:~$ fruits_array.sh
watermelon

Синтаксис работы с массивами

Чтобы обратится ко списку всех элементов массива подставьте символ @ вместо индекса.

meliorem@ubuntu:~$ fruits_array.sh
orange apple star fruit banana

Для обращения к нескольким элементам массива используйте синтаксис ${array[@]:s:n}, где n - количество элементов начиная с элемента под индексом - s.

meliorem@ubuntu:~$ fruits_array.sh
apple star fruit

Добавить новый элемент в массив можно используя оператор +=.

meliorem@ubuntu:~$ fruits_array.sh
orange apple star fruit banana aprycot

Узнать количество элементов в массиве ${#array[@]}.

meliorem@ubuntu:~$ fruits_array.sh
4

В массив можно сохранить результаты вывода команд.

meliorem@ubuntu:~$ folders_array.sh
Desktop Documents Downloads Music Pictures Public

Обход элементов массива в цикле

Используя цикл for можно обойти все элементы в массиве.

Чтобы обойти индексы элементов массива, добавьте знак ! к началу идентификатора.

meliorem@ubuntu:~$ for_index_array.sh
Элемент 0: 45
Элемент 1: 88
Элемент 2: 4

Особенности массивов в Bash

Если обратится к массиву без указания индекса, то будет возвращено значение первого элемента.

meliorem@ubuntu:~$ for_index_array.sh
orange

При обращении к элементам массива всегда заключайте его в фигурные скобки {} со знаком $ вначале. Если при обращении к элементу использовать синтаксис $fruits[1], то в Bash интерпретирует это как ссылку на первый элемент массива и строковый литерал [1].

meliorem@ubuntu:~$ for_index_array.sh
orange[1]