Массивы в сценариях оболочки

19.05.2018

Теги: BashCLIdeclareLinuxunsetКоллекцияМассивТипыДанных

Командный интерпретатор bash помимо переменных позволяет использовать массивы. Какое-либо значение размещается в массиве с указанием числового или строкового индекса. Индекс — это уникальный для конкретного массива ключ, позволяющий получить связанное с ним значение. Для доступа к значениям массива используются фигурные скобки.

$ array=(1 2 3 4 5)  # инициализация массива с определением элементов
$ echo ${array[0]}
1
$ array=(first second third)
$ echo ${array[@]}  # получение значений всех элементов
first second third

Пустой массив можно создать с помощью команды declare. Ей необходимо передать ключ -a (массив с числовыми индексами) и идентификатор массива:

$ declare -a digits  # создание пустого массива
$ digits=()          # аналогично предыдущему примеру
$ digits[0]=11
$ digits[1]=22

Индексы элементов массива можно указать явно:

$ digits=([1000]=120 [2000]=165) # явное указание индексов через квадратные скобки

Сложить элементы числового массива:

#!/bin/bash
digits=(11 22)
echo Сумма значений ${digits[0]} и ${digits[1]} равна $(( ${digits[0]} + ${digits[1]} ))
$ ./sum.sh
Сумма значений 11 и 22 равна 33

Вывести все элементы массива, начиная с третьего:

$ digits=(11 22 33 44 55 66 77)
$ echo ${digits[@]:2}
33 44 55 66 77

Вывести четыре элемента, начиная с третьего:

$ digits=(11 22 33 44 55 66 77)
$ echo ${digits[@]:2:4}
33 44 55 66

Вывести последний элемент массива:

$ digits=(11 22 33 44 55 66 77)
$ echo ${digits[@]:(-1)}
77

Количество элементов в массиве:

$ digits=(11 22 33 44 55 66 77)
$ echo ${#digits[@]}
7

Перебрать элементы массива в цикле:

#!/bin/bash

items=(Первый Второй Третий Четвертый Пятый)
for item in ${items[@]} ; do
    echo $item
done

Удалить массив можно с помощью команды unset:

$ unset digits

Ассоциативные массивы

Ассоциативными называются массивы, в которых индексы задаются с помощью строковых значений. Создавая массив через круглые скобки, можно задать каждому элементу строковой индекс, указав его в квадратных скобках:

$ capitals=([russia]='Москва' [britain]='Лондон')  # указание индексов при инициализации
$ capitals[france]='Париж'  # создание элементов с указанием индекса
$ echo "Столица России: ${capitals[russia]}"
Столица России: Москва

Создание пустого ассоциативного массива через declare отличается лишь тем, что необходимо указать ключ -A (в верхнем регистре):

$ declare -A capitals  # создание пустого ассоциативного массива

Поиск: Bash • CLI • Linux • declare • unset • Коллекция • Массив • Типы данных

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.