Чтение онлайн

на главную

Жанры

Искусство программирования на языке сценариев командной оболочки

Купер Мендель

Шрифт:

# array_name=( XXX YYY ZZZ ... )

area2=( ноль один два три четыре )

echo -n "area2[0] = "

echo ${area2[0]}

# Ага, индексация начинается с нуля (первый элемент массива имеет индекс [0], а не [1]).

echo -n "area2[1] = "

echo ${area2[1]} # [1] -- второй элемент массива.

# -----------------------------------------------------------------

echo; echo; echo

# -----------------------------------------------

#

Еще один массив, "area3".

# И еще один способ инициализации...

# array_name=([xx]=XXX [yy]=YYY ...)

area3=([17]=семнадцать [21]=двадцать_один)

echo -n "area3[17] = "

echo ${area3[17]}

echo -n "area3[21] = "

echo ${area3[21]}

# -----------------------------------------------

exit 0

Bash позволяет оперировать переменными, как массивами, даже если они не были явно объявлены таковыми.

string=abcABC123ABCabc

echo ${string[@]} # abcABC123ABCabc

echo ${string[*]} # abcABC123ABCabc

echo ${string[0]} # abcABC123ABCabc

echo ${string[1]} # Ничего не выводится!

# Почему?

echo ${#string[@]} # 1

# Количество элементов в массиве.

# Спасибо Michael Zick за этот пример.

Эти примеры еще раз подтверждают отсутствие контроля типов в Bash.

Пример 25-2. Форматирование стихотворения

#!/bin/bash

# poem.sh

# Строки из стихотворения (одна строфа).

Line[1]="Мой дядя самых честных правил,"

Line[2]="Когда не в шутку занемог;"

Line[3]="Он уважать себя заставил,"

Line[4]="И лучше выдумать не мог."

Line[5]="Его пример другим наука..."

# Атрибуты.

Attrib[1]=" А.С. Пушкин"

Attrib[2]="\"Евгений Онегин\""

for index in 1 2 3 4 5 # Пять строк.

do

printf " %s\n" "${Line[index]}"

done

for index in 1 2 # Две строки дополнительных атрибутов.

do

printf " %s\n" "${Attrib[index]}"

done

exit 0

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

array=( ноль один два три четыре пять )

echo ${array[0]} # ноль

echo ${array:0} # ноль

# Подстановка параметра -- первого элемента.

echo ${array:1} # оль

#

Подстановка параметра -- первого элемента,

#+ начиная с позиции #1 (со 2-го символа).

echo ${#array} # 4

# Длина первого элемента массива.

array2=( [0]="первый элемент" [1]="второй элемент" [3]="четвертый элемент" )

echo ${array2[0]} # первый элемент

echo ${array2[1]} # второй элемент

echo ${array2[2]} #

# Элемент неинициализирован, поэтому на экран ничего не выводится.

echo ${array2[3]} # четвертый элемент

При работе с массивами, некоторые встроенные команды Bash имеют несколько иной смысл. Например, unset -- удаляет отдельные элементы массива, или даже массив целиком.

Пример 25-3. Некоторые специфичные особенности массивов

#!/bin/bash

declare -a colors

# Допускается объявление массива без указания его размера.

echo "Введите ваши любимые цвета (разделяя их пробелами)."

read -a colors # Введите хотя бы 3 цвета для демонстрации некоторых свойств массивов.

# Специфический ключ команды 'read',

#+ позволяющий вводить несколько элементов массива.

echo

element_count=${#colors[@]}

# Получение количества элементов в массиве.

# element_count=${#colors[*]} -- дает тот же результат.

#

# Переменная "@" позволяет "разбивать" строку в кавычках на отдельные слова

#+ (выделяются слова, разделенные пробелами).

index=0

while [ "$index" -lt "$element_count" ]

do # Список всех элементов в массиве.

echo ${colors[$index]}

let "index = $index + 1"

done

# Каждый элемент массива выводится в отдельной строке.

# Если этого не требуется, то используйте echo -n "${colors[$index]} "

#

# Эквивалентный цикл "for":

# for i in "${colors[@]}"

# do

# echo "$i"

# done

# (Спасибо S.C.)

echo

# Еще один, более элегантный, способ вывода списка всех элементов массива.

echo ${colors[@]} # ${colors[*]} дает тот же результат.

echo

# Команда "unset" удаляет элементы из массива, или даже массив целиком.

unset colors[1] # Удаление 2-го элемента массива.

# Тот же эффект дает команда colors[1]=

echo ${colors[@]} # Список всех элементов массива -- 2-й элемент отсутствует.

Поделиться:
Популярные книги

Ты не мой Boy 2

Рам Янка
6. Самбисты
Любовные романы:
современные любовные романы
короткие любовные романы
5.00
рейтинг книги
Ты не мой Boy 2

Курсант: назад в СССР

Дамиров Рафаэль
1. Курсант
Фантастика:
попаданцы
альтернативная история
7.33
рейтинг книги
Курсант: назад в СССР

Энфис. Книга 1

Кронос Александр
1. Эрра
Фантастика:
боевая фантастика
рпг
5.70
рейтинг книги
Энфис. Книга 1

Сама себе хозяйка

Красовская Марианна
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Сама себе хозяйка

Возвращение Низвергнутого

Михайлов Дем Алексеевич
5. Изгой
Фантастика:
фэнтези
9.40
рейтинг книги
Возвращение Низвергнутого

Последний Паладин. Том 5

Саваровский Роман
5. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 5

Вечная Война. Книга V

Винокуров Юрий
5. Вечная Война
Фантастика:
юмористическая фантастика
космическая фантастика
7.29
рейтинг книги
Вечная Война. Книга V

Архил...? Книга 2

Кожевников Павел
2. Архил...?
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Архил...? Книга 2

Золотая осень 1977

Арх Максим
3. Регрессор в СССР
Фантастика:
альтернативная история
7.36
рейтинг книги
Золотая осень 1977

Доктора вызывали? или Трудовые будни попаданки

Марей Соня
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Доктора вызывали? или Трудовые будни попаданки

Приручитель женщин-монстров. Том 2

Дорничев Дмитрий
2. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 2

Его наследник

Безрукова Елена
1. Наследники Сильных
Любовные романы:
современные любовные романы
эро литература
5.87
рейтинг книги
Его наследник

Не грози Дубровскому! Том Х

Панарин Антон
10. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том Х

Игра топа. Революция

Вяч Павел
3. Игра топа
Фантастика:
фэнтези
7.45
рейтинг книги
Игра топа. Революция