Гид по технологиям

Массивы в bash: синтаксис и примеры

4 min read Shell Обновлено 17 Dec 2025
Массивы в bash — синтаксис и примеры
Массивы в bash — синтаксис и примеры

Кратко

Массивы в bash — простой способ хранить упорядоченные наборы значений. Они одномерны и требуют специфичного синтаксиса для инициализации, доступа и итерации. В этой статье — базовый синтаксис, распространённые приёмы, примеры, типичные ошибки и практическая шпаргалка.

Программист пишет bash-скрипты

Базовый синтаксис массивов в bash

Создать массив в bash просто. Самый прямой способ — инициализировать весь массив в одной строке:

#!/bin/bash

city=(London Paris Milan "New York")

Это создаёт массив из четырёх элементов с индексами 0..3. Обратите внимание: значения, содержащие пробелы (например, “New York”), нужно заключать в кавычки, чтобы bash не расценил их как отдельные элементы.

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

city[2]

Чтобы использовать значение в выражении, нужно:

  • Добавить префикс “$” перед именем переменной.
  • Обернуть имя переменной в фигурные скобки, чтобы bash правильно разобрал индекс: ${city[2]}.

Итоговый шаблон доступа к элементу:

${variable_name[index]}

Полный пример:

#!/bin/bash

city=(London Paris Milan "New York")
echo ${city[3]}

# Выведет: New York

Вместо инициализации сразу можно присваивать значения поэтапно:

#!/bin/bash

city[0]=London
city[1]=Paris
city[2]=Milan
city[3]="New York"
echo ${city[3]}

# Выведет: New York

Важно: вокруг знака равенства не должно быть пробелов. Запись вида city[0] = London вызовет ошибку.

Итерация и комбинирование с командами

Массивы удобно комбинировать с командной подстановкой $(cmd). Например, получить массив файлов в текущей директории:

arr=( $(ls) )

Для итерации по всем элементам используйте форму “for … in” и специальную подстановку ${arr[@]}:

for file in "${arr[@]}"; do
  wc -l "$file"
done

# Пример вывода:
#       3 envvars
#     547 httpd.conf

Обратите внимание на кавычки вокруг “${arr[@]}” — они сохраняют элементы с пробелами как целые значения.

Полезные операции с массивами

  • Узнать длину массива (количество элементов):
echo ${#city[@]}
# 4
  • Добавить элемент в конец:
arr+=(4)

Пример с городами:

city+=(Rome)
echo ${city[@]}
# London Paris Milan New York Rome
  • Взять срез массива (аналог slice):
${arr[@]:s:n}

Это вернёт срез начиная с позиции s длины n. Если опустить “:n”, вернётся всё от s до конца.

echo ${city[@]:2:2}
# Milan New York

echo ${city[@]:3}
# New York Rome

Пример: небольшая таблица значений

Можно использовать массивы как простую таблицу соответствий. Например, скрипт для возведения определённых чисел в квадрат (ограниченная таблица):

#!/bin/bash

sqrt[1]=1
sqrt[4]=2
sqrt[9]=3
sqrt[16]=4
sqrt[25]=5

echo ${sqrt[$1]}

Запуск: ./sqrt.sh 9 Вывод: 3

Этот приём — быстрый и удобный, когда у вас небольшое статическое соответствие индексов и значений.

Ограничения и когда массивы bash не подходят

Important: массивы в bash — одномерные и предназначены для простых задач. Причины не использовать массивы bash:

  • Нужны многомерные структуры или сложные записи — лучше использовать CSV/JSON и парсить с помощью jq, Python или awk.
  • Большие объёмы данных, где важна производительность — Python/Go/Perl быстрее и удобнее.
  • Необходима строгая типизация или структуры с полями — лучше язык с поддержкой структур.

Если нужен словарь (асссоциативный массив), в bash 4+ есть поддержку associative arrays:

declare -A dict
dict[apple]=red
echo ${dict[apple]}

Частые ошибки и отладка

  • Пробелы вокруг знака ‘=’ при присваивании — синтаксическая ошибка.
  • Забытые кавычки вокруг “${arr[@]}” — элементы с пробелами разобьются.
  • Использование ${var[2]} без фигурных скобок или знака $ — неверный синтаксис.

Совет для отладки: включите set -x в начале скрипта, чтобы видеть выполняемые команды.

Альтернативные подходы

  • Для работы с табличными данными используйте awk или Python. Они более выразительны и масштабируемы.
  • Для небольших словарей в интерактивных скриптах пригодны associative arrays (bash 4+).
  • Если нужно хранить сложные структуры, сериализуйте в JSON и используйте jq или парсер в целевом языке.

Чек-лист перед использованием массивов в скрипте

  • Проверил версию bash (associative arrays доступны в 4+).
  • Обработал возможные пробелы в элементах (использовал кавычки).
  • Избегаю пробелов вокруг ‘=’ при присваивании.
  • При итерации использую “${arr[@]}” и ставлю кавычки вокруг переменной.
  • Если данные большие или сложные — рассмотрел альтернативы (Python/jq).

Шпаргалка: краткие примеры

# Инициализация
arr=(a b "c d")

# Доступ к элементу
echo ${arr[1]}

# Все элементы
echo ${arr[@]}

# Количество
echo ${#arr[@]}

# Добавить
arr+=(e)

# Срез
echo ${arr[@]:1:2}

# Associative (bash 4+)
declare -A map
map[key]=value

Краткий глоссарий (1 строка каждый)

  • arr[@] — все элементы массива как список.
  • arr[*] — похож на arr[@], но поведение при кавычках отличается.
  • ${#arr[@]} — количество элементов в массиве.
  • declare -A — объявление ассоциативного массива.

Когда это не сработает

  • Если нужно хранить вложенные массивы или объекты — bash неудобен.
  • Если ожидается поток больших данных — лучше выбрать более производительный инструмент.

Резюме

Массивы в bash просты и полезны в скриптах для хранения списков и небольших таблиц соответствий. Главное — помнить об одномерности, о кавычках при работе с элементами и о том, что для сложных задач стоит выбрать более подходящий язык.

Важно: если вы используете ассоциативные массивы, убедитесь, что у вас bash версии 4 или новее.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство