Массивы в сценариях оболочки
Командный интерпретатор 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 • Коллекция • Массив • Типы данных