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

В bash программирование массивов совершенно другое, особенно когда речь идет о синтаксисе. Массивы Bash также строго одномерны, но они по-прежнему имеют множество применений.

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

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

город=(Лондон Париж Милан "Нью-Йорк")

(Вы можете найти весь код из этого примера города в этот GitHub Gist.)

Это создает массив, содержащий четыре элемента, проиндексированных от 0 до 3. Обратите внимание, что четвертое значение — это строка в кавычках, состоящая из двух слов. Вам нужно будет заключать в кавычки значения, содержащие пробелы, чтобы уточнить, что они не являются отдельными значениями.

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

город[2]
instagram viewer

Поскольку это bash, вам понадобится пара уточнений, чтобы фактически использовать значение в выражении:

  • Вам нужно будет добавить знак доллара ($) к имени переменной.
  • Вам также нужно будет использовать фигурные скобки ({}), чтобы сделать имя переменной однозначным. По умолчанию bash обрабатывает $город[2] как переменная с именем город. Добавьте фигурные скобки, чтобы сообщить bash, что нужно также оценить скобки и номер индекса.

Стандартный синтаксис доступа к массиву bash тогда:

${имя_переменной[индекс]}

Вот полный пример:

#!/бин/баш

город=(Лондон Париж Милан "Нью-Йорк")
эхо ${город[3]}

# Нью-Йорк

Вместо того, чтобы инициализировать массив сразу, вы можете присваивать ему значение шаг за шагом. Этот скрипт является более длинным эквивалентом предыдущего примера:

#!/бин/баш

город[0]=Лондон
город[1]=Париж
город[2]=Милан
город[3]="Нью-Йорк"
эхо ${город[3]}

# Нью-Йорк

Обратите внимание, что в любом случае вам нужно быть осторожным, чтобы не добавлять пробелы вокруг знака равенства. «city[0] = London» с пробелами вокруг знака равенства вызовет ошибку.

Другие варианты использования массивов Bash

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

#!/бин/баш

кврт[1]=1
кврт[4]=2
кврт[9]=3
кврт[16]=4
кврт[25]=5

эхо ${sqrt[$1]}

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

$ ./кв.ш 9
3

Вы можете быть осведомлены о $(команда) синтаксис для выполнения команды и сохранения ее вывода в переменной. Вы можете комбинировать это с синтаксисом инициализации массива, чтобы получить массив файлов для работы:

приб=($(лс))

Массив часто идеальная структура данных для итерации и Баш не исключение. Вы можете пройтись по массиву, чтобы напечатать каждый элемент или выполнить операцию над каждым элементом.

Вы можете обратиться к массиву в а за.. в петля, чтобы перебрать его содержимое. Например, вот простой цикл, который печатает количество строк в каждом файле массива. обр:

для файла в "${arr[@]}"; делать
wc -l "$ файл"
сделано

# 3 окружения
# 547 httpd.conf
# ...

Обратите внимание, что этот шаблон использует @ символ для извлечения всех элементов из массива.

Подробнее о синтаксисе массивов Bash

Вы можете получить количество элементов в массиве, используя следующее:

эхо ${#город[@]}

# 4

Вы можете добавить новый элемент в конец стандартного массива следующим образом:

обр+=(4)

Итак, чтобы добавить пятый город в список:

город+=(Рим)
эхо ${город[@]}

# Лондон Париж Милан Нью Йорк Рим

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

${обр[@]:с: п}

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

эхо ${город[@]:2:2}
# Милан Нью-Йорк

эхо ${город[@]:3}
# Нью-Йорк Рим

Bash имеет много функций, они просто требуют некоторого обучения

Массивы в bash могут иметь ограничения, но они предлагают ту же базовую функциональность, что и большинство языков программирования. Хотя bash исторически поддерживал только простые одномерные массивы, времена меняются. Последняя версия bash, 4, поддерживает ассоциативные массивы и отрицательное индексирование массива.

Какую бы версию bash вы ни использовали, важно понимать ее нюансы. Даже обычный синтаксис переменных имеет множество особенностей.

Объяснение переменных Bash: простое руководство с примерами

Читать дальше

ДелитьсяТвитнутьДелитьсяЭл. адрес

Похожие темы

  • Программирование
  • линукс
  • Программирование
  • Оболочка Linux Bash
  • Сценарии

Об авторе

Бобби Джек (опубликовано 71 статья)

Бобби — энтузиаст технологий, проработавший разработчиком программного обеспечения почти два десятилетия. В MUO он младший редактор отдела программирования. Он увлечен играми, работает главным редактором журнала Switch Player Magazine и занимается всеми аспектами онлайн-публикаций и веб-разработки.

Еще от Бобби Джека

Подпишитесь на нашу рассылку

Подпишитесь на нашу рассылку технических советов, обзоров, бесплатных электронных книг и эксклюзивных предложений!

Нажмите здесь, чтобы подписаться