Как объявить массив в bash

Bash-скрипты — удобный способ автоматизировать задачи, которые обычно решаются в командной строке.

Bash позволяет делать многое из того, что можно делать в других скрпитовых языках или языках программирования. Можно создавать и использовать переменные, запускать циклы, использовать условную логику и хранить данные в массивах.

От редакции Techrocks. Об условной логике в bash можно почитать статью «If в Bash: от новичка до профессионала».

Но хотя функционал может казаться очень похожим, синтаксис в скриптах bash все же особый. В этой статье мы расскажем вам, как объявляются массивы и как их можно использовать в коде.

Как объявить массив в bash

Объявить массив в bash легко, но нужно обращать внимание на синтаксис. Если вы программируете на других языках, код может выглядеть похожим, а мелкие различия легко упустить из виду.

Для объявления массива строк выполните следующие шаги:

  1. Дайте массиву имя.
  2. Поставьте после имени знак равенства. Вокруг знака «=» не должно быть пробелов.
  3. Заключите массив в круглые скобки (не в квадратные, как в JavaScript).
  4. Запишите нужные строки, взяв в каждую в кавычки. Между отдельными элементами массива не должно быть запятых!

Объявление массива строк выглядит так:

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]

Прокрутить вверх