Массивы Shell

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

Как и в большинстве языков программирования, индексы элементов массива начинаются с 0.

Массивы Shell обозначаются круглыми скобками, а элементы разделяются символами "пробел". Синтаксис имеет следующий вид:

array_name=(value1 value2 ... valuen)

Пример

Создайте простой массивmy_array:

Пример

#!/bin/bash
# автор: Rookie Tutorial
# url:www.example.com

my_array=(A B "C" D)

Мы также можем использовать числовые индексы для определения массива:

Пример

array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

Чтение массивов

Общий формат для чтения значений элементов массива:

${array_name[index]}

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

Пример

#!/bin/bash
# автор: Rookie Tutorial
# url:www.example.com

my_array=(A B "C" D)

echo "Первый элемент:${my_array[0]}"
echo "Второй элемент:${my_array[1]}"
echo "Третий элемент:${my_array[2]}"
echo "Четвёртый элемент:${my_array[3]}""

Выполните скрипт, и результат вывода будет следующим:

$ chmod +x test.sh 
$ ./test.sh
第一个元素为: A
第二个元素为: B
第三个元素为: C
第四个元素为: D

Ассоциативные массивы

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

Ассоциативные массивы используют командуdeclareдля объявления, синтаксис выглядит следующим образом:

declare -A array_name

-AОпция используется для объявления ассоциативного массива.

Ключи ассоциативного массива уникальны.

В следующем примере мы создаём ассоциативный массивsite, и создаём различные пары ключ-значение:

Пример

declare -A site=(["google"]="www.google.com" ["example"]="www.example.com" ["taobao"]="www.taobao.com")

Мы также можем сначала объявить ассоциативный массив, а затем задать ключи и значения:

Пример

declare -A site
site["google"]="www.google.com"
site["example"]="www.example.com"
site["taobao"]="www.taobao.com"

Вы также можете присваивать значения при определении:

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

array_name["index"]

В следующем примере мы обращаемся к элементам ассоциативного массива по ключу:

Пример

declare -A site
site["google"]="www.google.com"
site["example"]="www.example.com"
site["taobao"]="www.taobao.com"

echo ${site["example"]}

Выполните скрипт, и результат вывода будет следующим:

www.example.com

Получение всех элементов массива

Используйте@или*для получения всех элементов массива, например:

Пример

#!/bin/bash
# автор: Rookie Tutorial
# url:www.example.com

my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D

echo "Элементы массива:${my_array[*]}"
echo "Элементы массива:${my_array[@]}"

Выполните скрипт, и результат вывода будет следующим:

$ chmod +x test.sh 
$ ./test.sh
数组的元素为: A B C D
数组的元素为: A B C D

Пример

declare -A site
site["google"]="www.google.com"
site["example"]="www.example.com"
site["taobao"]="www.taobao.com"

echo "Элементы массива:${site[*]}""
echo "Элементы массива:${site[@]}""

Выполните скрипт, и результат вывода будет следующим:

$ chmod +x test.sh 
$ ./test.sh
数组的元素为: www.google.com www.example.com www.taobao.com
数组的元素为: www.google.com www.example.com www.taobao.com

Добавьте восклицательный знак перед массивом!, чтобы получить все ключи массива, например:

Пример

declare -A site
site["google"]="www.google.com"
site["example"]="www.example.com"
site["taobao"]="www.taobao.com"

echo "Ключи массива:${!site[*]}""
echo "Ключи массива:${!site[@]}""

Выполните скрипт, и результат вывода будет следующим:

数组的键为: google example taobao
数组的键为: google example taobao

Получение длины массива

Способ получения длины массива такой же, как способ получения длины строки, например:

Пример

#!/bin/bash
# автор: Rookie Tutorial
# url:www.example.com

my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D

echo "Количество элементов массива:${#my_array[*]}""
echo "Количество элементов массива:${#my_array[@]}""

Выполните скрипт, и результат вывода будет следующим:

$ chmod +x test.sh 
$ ./test.sh
数组元素个数为: 4
数组元素个数为: 4
Другие расширения