Массивы Bash

Массивы Bash

Массивы — одна из наиболее используемых и фундаментальных структур данных. Массив можно представить как переменную, хранящую в себе несколько переменных. Массивы предлагают удобный способ представления и управления группой связанных элементов данных как единым целым.

В этой статье мы рассмотрим массивы Bash и объясним, как использовать их в скриптах Bash.

Массивы Bash

Bash поддерживает одномерные числовые и ассоциативные массивы. Числовые массивы задаются целыми числами, а ассоциативные — строками.

К числовым индексам массивов можно обращаться с конца, используя отрицательные индексы; индекс -1 указывает на последний элемент. Индексы не обязательно должны быть последовательными.

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

Bash не поддерживает многомерные массивы, и элементы массива не могут также являться массивами.

Максимальное количество элементов, которые можно хранить в массиве, не ограничено.

Создание массивов Bash

В Bash массивы можно инициализировать несколькими различными способами.

Создание числово-индексированных массивов

Переменные Bash не типизированы. Любую переменную можно использовать как индексированный массив без её объявления.

Чтобы явно объявить массив, используйте встроенную функцию declared:

 declare -a array_name

Одним из способов создания индексированного массива является использование следующей формы:

 array_name [ index_1 ]= value_1 array_name [ index_2 ]= value_2 array_name [ index_n ]= value_n

Где index_* — положительное целое число.

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

 array_name =( element_1 element_2 element_N )

При создании массива с использованием приведенной выше формы индексация начинается с нуля, т. е. первый элемент имеет индекс 0 .

Создание ассоциативных массивов

Ассоциативные массивы — это тип массива, в котором каждый элемент идентифицируется уникальным ключом вместо индекса.

В отличие от числовых индексов, ассоциативные массивы должны быть объявлены до того, как их можно будет использовать.

Чтобы объявить ассоциативный массив, используйте встроенную команду declare с опцией -A (в верхнем регистре):

 declare -A array_name

Ассоциативные массивы создаются с использованием следующей формы:

 declare -A array_name array_name [ index_foo ]= value_foo array_name [ index_bar ]= value_bar array_name [ index_xyz ]= value_xyz

Где index_* может быть любой строкой.

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

 declare -A array_name array_name =( [ index_foo ]= value_foo [ index_bar ]= value_bar [ index_xyz ]= value_xyz )

Операции с массивами

Если вы новичок в программировании на Bash, массивы в этой системе могут поначалу показаться вам запутанными. Однако после прочтения этой статьи вы будете лучше их понимать.

Справочные элементы

Чтобы сослаться на отдельный элемент, необходимо знать индекс элемента.

На любой элемент можно ссылаться, используя следующий синтаксис:

 ${ array_name [index] }

Синтаксис доступа к элементу массива аналогичен синтаксису большинства языков программирования. Фигурные скобки ${} необходимы, чтобы избежать операторов расширения имён файлов оболочки.

Давайте выведем элемент с индексом 1 :

 ## declare the array declare -a my_array =( "Hydrogen" "Helium" "Lithium" "Beryllium" ) ## print element echo ${ my_array [1] }
 Helium

Если в качестве индекса использовать @ или * , слово расширяется на все элементы массива.

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

 ## declare the array declare -a my_array =( "Hydrogen" "Helium" "Lithium" "Beryllium" ) ## print all elements echo " ${ my_array [@] } "
 Hydrogen Helium Lithium Beryllium

Единственное различие между @ и * возникает, когда форма ${my_array[x]} заключена в двойные кавычки. В этом случае * раскрывается в одно слово, элементы массива разделяются пробелами. @ раскрывает каждый элемент массива в отдельное слово. Это особенно важно при использовании формы для неграмотного перевода элементов массива.

Чтобы вывести ключи массива, добавьте оператор ! перед именем массива:

 ${ !array_name[index] }

Вот пример:

 ## declare the array declare -a my_array =( "Hydrogen" "Helium" "Lithium" "Beryllium" ) ## print all elements echo " ${ !my_array[@] } "
 0 1 2 3

Длина массива

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

 ${# array_name [@] }

Синтаксис такой же, как и при ссылке на все элементы, с добавлением символа # перед именем массива.

 ## declare the array declare -a my_array =( "Hydrogen" "Helium" "Lithium" "Beryllium" ) ## array Length echo ${# my_array [@] }
 4

Пройтись по массиву

При наличии массива элементов часто требуется выполнить операцию над каждым элементом. Один из способов добиться этого — итерировать массив с помощью цикла. Цикл for позволяет обращаться к каждому элементу массива по отдельности и выполнять над ним требуемую операцию.

 declare -a my_array =( "Hydrogen" "Helium" "Lithium" "Beryllium" ) ## Array Loop for i in " ${ my_array [@] } " do echo " $i " done

Приведенный выше код будет перебирать массив и выводить каждый элемент в новой строке:

 Hydrogen Helium Lithium Beryllium

Вот пример того, как распечатать все ключи и значения:

 declare -a my_array =( "Hydrogen" "Helium" "Lithium" "Beryllium" ) ## Array Loop for i in " ${ !my_array[@] } " do echo " $i " " ${ my_array [ $i ] } " done
 0 Hydrogen 1 Helium 2 Lithium 3 Beryllium

Другой способ перебрать массив — получить длину массива и использовать цикл C-style :

 declare -a my_array =( "Hydrogen" "Helium" "Lithium" "Beryllium" ) # Length of the array length = ${# my_array [@] } # Array Loop for (( i = 0 ; i < ${ length } ; i++ )) do echo $i ${ my_array [ $i ] } done
 0 Hydrogen 1 Helium 2 Lithium 3 Beryllium

Добавление нового элемента

Чтобы добавить новый элемент в массив bash и указать его индекс, используйте следующую форму:

 my_array [ index_n ]= "New Element"

Вот пример:

 declare -a my_array =( "Hydrogen" "Helium" "Lithium" "Beryllium" ) ## add new element my_array [ 9 ]= "Aluminum" ## print all elements echo " ${ my_array [@] } "
 Hydrogen Helium Lithium Beryllium Aluminum

Другой способ добавить новый элемент в массив без указания индекса — использовать оператор += . Вы можете добавить один или несколько элементов:

 declare -a my_array =( "Hydrogen" "Helium" "Lithium" "Beryllium" ) ## add new elements my_array +=( Cobalt Nickel ) ## print all elements echo " ${ my_array [@] } "
 Hydrogen Helium Lithium Beryllium Cobalt Nickel

Удалить элемент

Чтобы удалить один элемент, вам необходимо знать его индекс. Элемент можно удалить с помощью команды unset :

 unset my_array [ index ]

Давайте рассмотрим пример:

 declare -a my_array =( "Hydrogen" "Helium" "Lithium" "Beryllium" ) ## remove element unset my_array [ 2 ] ## print all elements echo " ${ my_array [@] } "
 Hydrogen Helium Beryllium

Заключение

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

Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.

терминал bash

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *