локальні змінні

Що таке змінна?

локальні змінні

Змінні, оголошені як локальні, мають обмежену область видимості, і доступні тільки в межах блоку , В якому вони були оголошені. Для функцій це означає, що локальна змінна "видно" тільки в тілі самої функції.

Приклад 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-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). " # Поверніться до реальності. # Якщо вам захочеться підняти верхню межу, # то перепишіть цю програму на справжньому мовою програмування. exit $ E_RANGE_ERR fi fact () {local number = $ 1 # Змінна "number" має бути визнана як локальна, # інакше результат буде невірний. if [ "$ number" -eq 0] then factorial = 1 # Факторіал числа 0 = 1. else let "decrnum = number - 1" fact $ decrnum # Рекурсивний виклик функції. let "factorial = $ number * $?" fi return $ factorial} fact $ 1 echo "Факторіал числа $ 1 = $ ?." exit 0

Ще один приклад використання рекурсії ви знайдете в Приклад A-18 . Не забувайте, що рекурсія вельми ресурсномістке задоволення, до того ж вона виконується занадто повільно, тому не слід використовувати її в сценаріях.


Спонсори:

Хостинг:



Що таке змінна?
Bin / bash # факторіал # --------- # Чи дійсно bash допускає рекурсію?
Let "factorial = $ number * $?
Quot; fi return $ factorial} fact $ 1 echo "Факторіал числа $ 1 = $ ?