Книга: Искусство программирования на языке сценариев командной оболочки
Пример 33-12. Передача массива в функцию и возврат массива из функции
Пример 33-12. Передача массива в функцию и возврат массива из функции
#!/bin/bash
# array-function.sh: Передача массива в функцию и...
# "возврат" массива из функции
Pass_Array ()
{
local passed_array # Локальная переменная.
passed_array=( `echo "$1"` )
echo "${passed_array[@]}"
# Список всех элементов в новом массиве,
#+ объявленном и инициализированном в функции.
}
original_array=( element1 element2 element3 element4 element5 )
echo
echo "original_array = ${original_array[@]}"
# Список всех элементов исходного массива.
# Так можно отдать массив в функцию.
# **********************************
argument=`echo ${original_array[@]}`
# **********************************
# Поместив все элементы массива в переменную,
#+ разделяя их пробелами.
#
# Обратите внимание: метод прямой передачи массива в функцию не сработает.
# Так можно получить массив из функции.
# *****************************************
returned_array=( `Pass_Array "$argument"` )
# *****************************************
# Записать результат в переменную-массив.
echo "returned_array = ${returned_array[@]}"
echo "============================================================="
# А теперь попробуйте получить доступ к локальному массиву
#+ за пределами функции.
Pass_Array "$argument"
# Функция выведет массив, но...
#+ доступ к локальному массиву, за пределами функции, окажется невозможен.
echo "Результирующий массив (внутри функции) = ${passed_array[@]}"
# "ПУСТОЕ" ЗНАЧЕНИЕ, поскольку это локальная переменная.
echo
exit 0
Более сложный пример передачи массивов в функции, вы найдете в Пример A-11.
Использование конструкций с двойными круглыми скобками позволяет применять C-подобный синтаксис операций присвоения и инкремента переменных, а также оформления циклов for и while. См. Пример 10-12 и Пример 10-17.
Иногда очень удобно "пропускать" данные через один и тот же фильтр, но с разными параметрами, используя конвейерную обработку. Особенно это относится к tr и grep.
# Из примера "wstrings.sh".
wlist=`strings "$1" | tr A-Z a-z | tr '[:space:]' Z |
tr -cs '[:alpha:]' Z | tr -s '173-377' Z | tr Z ' '`
- Пример 33-11. Необычный способ получения нескольких возвращаемых значений
- Пример установочного скрипта
- Пример из практики
- Передача прав
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Аргументы функции в Python
- 3. Функции
- Примеры получения статистики
- Пример применения метода «пять почему»
- Новые функции API для работы с Blob и массивами
- Пример 12-8. Частота встречаемости отдельных слов
- 1.2.5. Пример программы