Bash поддерживает как числовые, так и ассоциативные массивы. Общее количество элементов этих типов массивов может быть вычислено несколькими способами в Bash. Длину массива можно подсчитать с помощью символа «#» или цикла, или с помощью команды типа «wc» или «grep». В этой статье показаны различные способы подсчета длины массива в Bash.
Найдите длину массива, используя «#»
Использование символа «#» — самый простой способ вычислить длину массива. В этой части статьи показаны способы подсчета общего количества элементов числового и ассоциативного массива.
Пример 1. Подсчет длины числового массива с использованием «#»
Создайте файл Bash со следующим сценарием, который подсчитывает и печатает длину числового массива, используя символ «#». Здесь используются символы «@» и «*» для обозначения всех элементов массива.
#Объявите числовой массив items=("Shirt" "T-Shirt" "Pant" "Panjabi" "Shoe") #Подсчитайте длину массива с помощью '#' echo "Длина массива с использованием '#' с '@': ${#items[@]}" echo "Длина массива с использованием '#' с '*': ${#items[*]}"
Следующий вывод появляется после выполнения скрипта. Массив содержит пять строковых значений, и для символов «@» и «*» отображается один и тот же результат :
andreyex@andreyex: -$ bash arraylen1.bash Длина массива с использованием '#' с '@': 5 Длина массива с использованием # с 5 andreyex@andreyex: -$
Пример 2. Подсчет длины ассоциативного массива с использованием «#»
Создайте файл Bash со следующим сценарием, который подсчитывает и печатает длину ассоциативного массива, используя символ «#». Здесь используются символы «@» и «*» для обозначения всех элементов массива.
#Объявляем ассоциативный массив declare -A items=([6745]="Shirt (M)" [2345]="Shirt (L)" [4566]="Pant (36)") #Подсчитайте длину массива с помощью '#' echo "Длина ассоциативного массива с использованием '#' с '@': ${#items[@]}" echo "Длина ассоциативного массива с использованием '#' с '*': ${#items[*]}"
Следующий вывод появляется после выполнения скрипта. Массив содержит три строковых значения, и для символов «@» и «*» отображается один и тот же результат :
andreyex@andreyex:-$ bash arraylen2.bash Длина ассоциативного массива с использованием '#" с '@': 3 Длина ассоциативного массива с использованием '#* с ***: 3 andreyex@andreyex: -$
Найдите длину массива с помощью цикла
Использование цикла — еще один способ подсчета общего количества элементов в массиве. Длина массива подсчитывается с помощью цикла while в следующем примере:
Пример. Подсчет длины массива с использованием цикла
Создайте файл Bash со следующим сценарием, который подсчитывает общее количество элементов с помощью цикла «пока». Числовой массив из четырех строковых значений объявляется в скрипте с помощью команды «объявить». Цикл for используется для повторения и печати значений массива. Здесь переменная $counter используется для подсчета длины массива, который увеличивается на каждой итерации цикла.
#Объявить массив declare -a items=("Shirt(M)" "Shirt(L)" "Panjabi(42)" "Pant(38)") echo "Значения массива являются:" #Подсчитайте длину массива с помощью цикла counter=0 #Выполните итерацию значений массива for val in ${items[@]} do #Print the array value echo $val ((counter++)) done echo "Длина массива с использованием цикла $counter."
andreyex@andreyex:-$ bash arraylen3.bash Значения массива являются: Shirt(M) Shirt(L) Panjabi(42) Pant(38) The Длина массива с использованием цикла 4. andreyex@andreyex: -$
Найдите длину массива с помощью команды «Wc»
Длину массива можно посчитать с помощью некоторых команд. Команда wc — одна из них. Но эта команда не возвращает правильный вывод, если массив содержит строковое значение из нескольких слов. В следующем примере показан метод подсчета общего количества элементов массива и сравнения значения длины массива, подсчитываемого символом «#» и командой wc.
Пример: подсчет длины массива с помощью команды «Wc»
Создайте файл Bash со следующим сценарием, который подсчитывает общее количество элементов с помощью команды «wc». В скрипте объявлен числовой массив из пяти строковых значений. Команда «wc» с параметром -w используется для подсчета длины двух массивов по 5 элементов. Один массив содержит строку из одного слова, а другой массив содержит строку из двух слов. Длина вторых массивов подсчитывается с помощью символа «#» и команды «wc ».
#Объявите числовой массив из одного слова строки items=("Shirt" "T-Shirt" "Pant" "Panjabi" "Shoe") echo "Значения массива: ${items[@]}" #Подсчитайте длину массива с помощью 'wc' len=`echo ${items[@]} | wc -w` echo "Длина массива с использованием команды 'wc': $len" #Объявите числовой массив из нескольких слов строки items2=("Shirt (XL)" "T-Shirt (L)" "Pant (34)" "Panjabi (38)" "Shoe (9)") echo "Array values: ${items2[@]}" echo "Длина массива с использованием '#': ${#items2[@]}" #Подсчитайте длину массива с помощью 'wc' len=`echo ${items2[@]} | wc -w` echo "Длина массива с использованием команды 'wc': $len"
Следующий вывод появляется после выполнения скрипта. Судя по выводу, команда «wc» выдает неверный вывод для массива, содержащего строковое значение из двух слов:
andreyex@andreyex:-$ bash arraylen4.bash Значения массива: Shirt T-Shirt Pant Panjabi Shoe Длина массива с использованием команды 'wc": 5 Значения массива: Shirt (XL) T-Shirt (L) Pant (34) Panjabi (38) Shoe (9) Длина массива с использованием '#': 5 Длина массива с использованием команды 'wc': 10 andreyex@andreyex: -$
Заключение
В этой статье показаны методы подсчета длины массива с помощью символа «#», цикла и команды «wc ».