Массивы Shell
Массив может хранить несколько значений. Bash Shell поддерживает только одномерные массивы (не поддерживает многомерные массивы). Вам не нужно определять размер массива при инициализации (аналогично PHP).
Как и в большинстве языков программирования, индексы элементов массива начинаются с 0.
Массивы Shell обозначаются круглыми скобками, а элементы разделяются символами "пробел". Синтаксис имеет следующий вид:
array_name=(value1 value2 ... valuen)
Пример
Создайте простой массивmy_array:
Пример
# автор: Rookie Tutorial
# url:www.example.com
my_array=(A B "C" D)
Мы также можем использовать числовые индексы для определения массива:
Пример
array_name[1]=value1
array_name[2]=value2
Чтение массивов
Общий формат для чтения значений элементов массива:
${array_name[index]}
В следующем примере выполняется чтение элементов массива по числовому индексу:
Пример
# автор: 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, и создаём различные пары ключ-значение:
Пример
Мы также можем сначала объявить ассоциативный массив, а затем задать ключи и значения:
Пример
site["google"]="www.google.com"
site["example"]="www.example.com"
site["taobao"]="www.taobao.com"
Вы также можете присваивать значения при определении:
Чтобы получить доступ к элементам ассоциативного массива, можно использовать указанный ключ. Формат следующий:
array_name["index"]
В следующем примере мы обращаемся к элементам ассоциативного массива по ключу:
Пример
site["google"]="www.google.com"
site["example"]="www.example.com"
site["taobao"]="www.taobao.com"
echo ${site["example"]}
Выполните скрипт, и результат вывода будет следующим:
www.example.com
Получение всех элементов массива
Используйте@или*для получения всех элементов массива, например:
Пример
# автор: 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
Пример
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
Добавьте восклицательный знак перед массивом!, чтобы получить все ключи массива, например:
Пример
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
Получение длины массива
Способ получения длины массива такой же, как способ получения длины строки, например:
Пример
# автор: 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Другие расширения