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


Программирование на языке сценариев командной оболочки - стр. 236


Пример 22-8. Область видимости локальных переменных

#!/bin/bash

func () { local loc_var=23 # Объявление локальной переменной. echo echo "\"loc_var\" в функции = $loc_var" global_var=999 # Эта переменная не была объявлена локальной. echo "\"global_var\" в функции = $global_var" }

func

# Проверим, "видна" ли локальная переменная за пределами функции.

echo echo "\"loc_var\" за пределами функции = $loc_var" # "loc_var" за пределами функции = # Итак, $loc_var не видна в глобальном контексте. echo "\"global_var\" за пределами функции = $global_var" # "global_var" за пределами функции = 999 # $global_var имеет глобальную область видимости. echo

exit 0

Переменные, объявляемые в теле функции, считаются необъявленными до тех пор, пока функция не будет вызвана. Это касается всех

переменных.

#!/bin/bash

func () { global_var=37 # Эта переменная будет считаться необъявленной #+ до тех пор, пока функция не будет вызвана. } # КОНЕЦ ФУНКЦИИ

echo "global_var = $global_var" # global_var = # Функция "func" еще не была вызвана, #+ поэтому $global_var пока еще не "видна" здесь.

func echo "global_var = $global_var" # global_var = 37 # Переменная была инициализирована в функции.

22.2.1. Локальные переменные делают возможной рекурсию.

Хотя локальные переменные и допускают рекурсию, [52] но она сопряжена с большими накладными расходами и не рекомендуется для использования в сценариях. [53]

Пример 22-9. Использование локальных переменных при рекурсии

#!/bin/bash

# факториал # ---------

# Действительно ли bash допускает рекурсию? # Да! Но... # Нужно быть действительно дубинноголовым, чтобы использовать ее в сценариях # на языке командной оболочки.

MAX_ARG=5 E_WRONG_ARGS=65 E_RANGE_ERR=66

if [ -z "$1" ] then echo "Порядок использования: `basename $0` число" exit $E_WRONG_ARGS fi

if [ "$1" -gt $MAX_ARG ] then echo "Выход за верхний предел (максимально возможное число -- 5)." # Вернитесь к реальности. # Если вам захочется поднять верхнюю границу, # то перепишите эту программу на настоящем языке программирования.


- Начало -  - Назад -  - Вперед -