20 июл. 2000 г.

Язык bash часть 3

Язык командного интерпретатора bash. Part 3. «Массивы».


И вот настал черёд третьего поста из цикла «Язык командного интерпретатора bash». В первых двух топиках мы в общих чертах рассмотрели понятие параметров оболочки и механизмы подстановок. В текущем топике речь пойдёт о массивах интерпретатора bash. Топик будет совсем небольшим, так как объём охватываемой им информации также невелик и легко усваивается.
Командный интерпретатор bash поддерживает одномерные массивы с неограниченным числом элементов. Да, лимит на количество элементов отсутствует, в то время, как в других оболочках существуют эти ограничения. Например, в оболочке ksh максимальным числом элементов является 1024 элемента.
Как я говорил в своём первом посте, в bash есть только один тип – строковый, а значит, все элементы массива также являются строковыми. Определяющим фактором здесь служит содержимое параметров. Нумерация элементов начинается с нуля.
Приведу пример присвоения значений элементам массива:

$ arr[0]=element1
$ arr[5]=element
$ arr[9]=elementN

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

$ echo ${arr[0]}

Чтобы обратиться ко всем элементам массива сразу, нужно в качестве порядкового номера элемента массива указать символ * или символ @. Например:
$ echo ${arr[*]}
element1 element elementN

Символ @ нужно использовать, если значение хотя бы одного элемента массива может содержать пробелы.
Оболочка позволяет инициализировать массив не только последовательно указывая новый элемент в каждой строчке, но и целиком. Например:

$ arr=(1 2 3 4 5 6 7 8 9)

Данный пример будет эквивалентен списку:
$ arr[0]=1; arr[1]=2; arr[2]=3; arr[3]=4; arr[4]=5; arr[5]=6; arr[6]=7; arr[7]=8; arr[8]=9

Данные способы инициализации можно применять не только в bash, но и в других командных оболочках, таких как ksh.
А этот способ работает только в bash:

$ mass=([0]=element0 [5]=element5)

Для того, чтобы посмотреть количество элементов в массиве, необходимо выполнить команду:
$ echo ${#arr[@]}

Вывести содержимое всего массива:
$ echo ${arr[@]}
 
===========================Добавка из комментов=================================
Добавки:
1) Посмотреть количество элементов массива: echo ${#arr[@]}
2) Обработать массив(в данном случае показать каждый элемент):
for ((i=0;i<${#arr[@]};i++));do echo ${arr[$i]};done
+