Как и большинству языков программирования, сценариям bash иногда необходимо иметь дело со списком связанных значений. Самая простая форма — это стандартный массив.
В bash программирование массивов совершенно другое, особенно когда речь идет о синтаксисе. Массивы Bash также строго одномерны, но они по-прежнему имеют множество применений.
Базовый синтаксис массивов Bash
Создать массив в bash очень просто. Вы можете инициализировать весь массив с помощью скобок, например:
город=(Лондон Париж Милан "Нью-Йорк")
(Вы можете найти весь код из этого примера города в этот GitHub Gist.)
Это создает массив, содержащий четыре элемента, проиндексированных от 0 до 3. Обратите внимание, что четвертое значение — это строка в кавычках, состоящая из двух слов. Вам нужно будет заключать в кавычки значения, содержащие пробелы, чтобы уточнить, что они не являются отдельными значениями.
Вы можете получить доступ к одному элементу, используя синтаксис квадратных скобок, общий для всех языков программирования:
город[2]
Поскольку это 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
- Сценарии
Об авторе
Бобби — энтузиаст технологий, проработавший разработчиком программного обеспечения почти два десятилетия. В MUO он младший редактор отдела программирования. Он увлечен играми, работает главным редактором журнала Switch Player Magazine и занимается всеми аспектами онлайн-публикаций и веб-разработки.
Подпишитесь на нашу рассылку
Подпишитесь на нашу рассылку технических советов, обзоров, бесплатных электронных книг и эксклюзивных предложений!
Нажмите здесь, чтобы подписаться