Язык командного интерпретатора bash. Part 3. «Массивы».
И вот настал черёд третьего поста из цикла «Язык командного
интерпретатора bash». В первых двух топиках мы в общих чертах
рассмотрели понятие параметров оболочки и механизмы подстановок. В
текущем топике речь пойдёт о массивах интерпретатора bash. Топик будет
совсем небольшим, так как объём охватываемой им информации также невелик
и легко усваивается.
Командный интерпретатор bash поддерживает одномерные массивы с неограниченным числом элементов. Да, лимит на количество элементов отсутствует, в то время, как в других оболочках существуют эти ограничения. Например, в оболочке ksh максимальным числом элементов является 1024 элемента.
Как я говорил в своём первом посте, в bash есть только один тип – строковый, а значит, все элементы массива также являются строковыми. Определяющим фактором здесь служит содержимое параметров. Нумерация элементов начинается с нуля.
Приведу пример присвоения значений элементам массива:
Чтобы обратиться к значению элемента массива, следует также указать имя массива и в квадратных скобках порядковый номер элемента.
Например, выведем первый элемент массива, инициализированный в первом примере:
Чтобы обратиться ко всем элементам массива сразу, нужно в качестве порядкового номера элемента массива указать символ * или символ @. Например:
Символ @ нужно использовать, если значение хотя бы одного элемента массива может содержать пробелы.
Оболочка позволяет инициализировать массив не только последовательно указывая новый элемент в каждой строчке, но и целиком. Например:
Данный пример будет эквивалентен списку:
Данные способы инициализации можно применять не только в bash, но и в других командных оболочках, таких как ksh.
А этот способ работает только в 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
1) Посмотреть количество элементов массива: echo ${#arr[@]}
2) Обработать массив(в данном случае показать каждый элемент):
for ((i=0;i<${#arr[@]};i++));do echo ${arr[$i]};done