

Bash-скрипты — удобный способ автоматизировать задачи, которые обычно решаются в командной строке.
Bash позволяет делать многое из того, что можно делать в других скрпитовых языках или языках программирования. Можно создавать и использовать переменные, запускать циклы, использовать условную логику и хранить данные в массивах.
От редакции Techrocks. Об условной логике в bash можно почитать статью «If в Bash: от новичка до профессионала».
Но хотя функционал может казаться очень похожим, синтаксис в скриптах bash все же особый. В этой статье мы расскажем вам, как объявляются массивы и как их можно использовать в коде.
Как объявить массив в bash
Объявить массив в bash легко, но нужно обращать внимание на синтаксис. Если вы программируете на других языках, код может выглядеть похожим, а мелкие различия легко упустить из виду.
Для объявления массива строк выполните следующие шаги:
- Дайте массиву имя.
- Поставьте после имени знак равенства. Вокруг знака «=» не должно быть пробелов.
- Заключите массив в круглые скобки (не в квадратные, как в JavaScript).
- Запишите нужные строки, взяв в каждую в кавычки. Между отдельными элементами массива не должно быть запятых!
Объявление массива строк выглядит так:
myArray=("cat" "dog" "mouse" "frog)
Вот и все! Ничего сложного.
Доступ к элементам массива в bash
Есть два разных способа перебрать массив в цикле. Можно перебирать или сами элементы, или их индексы.
Перебор элементов массива
Код для прохода по элементам массива выглядит так:
for str in ${myArray[@]}; do echo $str done
Это несколько напоминает использование forEach
в JavaScript. Код говорит следующее: «Для каждой строки (str) в массиве (myArray) выведи эту строку».
Результат работы цикла будет выглядеть так:
cat dog mouse frog
Примечание. Символ @
в квадратных скобках указывает на то, что вы перебираете в цикле все элементы массива. Если его не указать и написать просто for str in ${myArray}
, выведется лишь первая строка в массиве.
Перебор индексов элементов в массиве
Альтернативный вариант — перебирать не сами элементы, а их индексы. Это напоминает цикл for
в JavaScript. Полезно, если вам нужен доступ к индексу каждого элемента.
Для использования этого метода нам нужно написать следующий код:
for i in ${!myArray[@]}; do echo "element $i is ${myArray[$i]}" done
Результат работы цикла будет выглядеть так:
element 0 is cat element 1 is dog element 2 is mouse element 3 is frog
Примечание. Восклицательный знак перед переменной myArray
указывает на то, что вы хотите перебрать индексы элементов, а не сами элементы. Если вы привыкли к тому, что восклицательный знак служит как отрицание, это может сбивать с толку.
Еще одно примечание. Bash обычно не требует использования фигурных скобок для переменных, но для массивов это обязательно. Так что, если обращаетесь к массиву, надо писать ${myArray}
, а если к строке или числу, то просто ставите перед именем переменной знак $
.
Заключение
Bash-скрипты полезны для автоматизации консольных команд. А массивы — отличный инструмент для хранения набора данных. Объявлять массив в bash не сложно, однако синтаксис отличается от синтаксиса массивов в языках программирования. Просто будьте внимательны, и вы избежите досадных ошибок.
От редакции Techrocks. Также советуем почитать статью «Разбираемся с аргументами в Bash-скриптах».
Перевод статьи «Bash Array – How to Declare an Array of Strings in a Bash Script».
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]