Пример 25-1. Простой массив

Пример 25-1. Простой массив

#!/bin/bash

area[11]=23

area[13]=37

area[51]=UFOs

# Массивы не требуют, чтобы последовательность элементов в массиве была непрерывной.

# Некоторые элементы массива могут оставаться неинициализированными.

# "Дыркм" в массиве не являются ошибкой.

echo -n "area[11] = "

echo ${area[11]} # необходимы {фигурные скобки}

echo -n "area[13] = "

echo ${area[13]}

echo "содержимое area[51] = ${area[51]}."

# Обращение к неинициализированным элементам дает пустую строку.

echo -n "area[43] = "

echo ${area[43]}

echo "(элемент area[43] -- неинициализирован)"

echo

# Сумма двух элементов массива, записанная в третий элемент

area[5]=`expr ${area[11]} + ${area[13]}`

echo "area[5] = area[11] + area[13]"

echo -n "area[5] = "

echo ${area[5]}

area[6]=`expr ${area[11]} + ${area[51]}`

echo "area[6] = area[11] + area[51]"

echo -n "area[6] = "

echo ${area[6]}

# Эта попытка закончится неудачей, поскольку сложение целого числа со строкой не допускается.

echo; echo; echo

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

# Другой массив, "area2".

# И другой способ инициализации массива...

# 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.