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

Пример 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 ' '`

Оглавление книги


Генерация: 1.123. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз