<Попередній | зміст | Наступна>
Місцеві змінні
У сценаріях, які ми написали до цього часу, всі змінні (включаючи константи) були глобальні змінні. Глобальні змінні зберігають своє існування протягом всієї програми. Це добре для багатьох речей, але іноді може ускладнити використання функцій оболонки. Внутрішні функції оболонки часто бажано мати локальні змінні. Локальні змінні доступні лише в межах функції оболонки, в якій вони визначені, і припиняють існувати, як тільки функція оболонки завершується.
Наявність локальних змінних дозволяє програмісту використовувати змінні з іменами, які вже можуть існувати в глобальному сценарії або в інших функціях оболонки, не турбуючись про потенційні конфлікти імен.
Ось приклад сценарію, який демонструє, як визначаються та використовуються локальні змінні:
#! / бін / баш
# local-vars: скрипт для демонстрації локальних змінних
#! / бін / баш
# local-vars: скрипт для демонстрації локальних змінних
foo = 0
# глобальна змінна foo
foo = 0
функція_1 () {
local foo # змінна foo локальна до funct_1 foo=1
echo "funct_1: foo = $foo"
}
функція_2 () {
local foo # змінна foo локальна до funct_2 foo=2
echo "funct_2: foo = $foo"
}
echo "global: foo = $foo" funct_1
функція_1 () {
local foo # змінна foo локальна до funct_1 foo=1
echo "funct_1: foo = $foo"
}
функція_2 () {
local foo # змінна foo локальна до funct_2 foo=2
echo "funct_2: foo = $foo"
}
echo "global: foo = $foo" funct_1
Місцеві змінні
echo "global: foo = $foo" funct_2
echo "global: foo = $foo"
echo "global: foo = $foo" funct_2
echo "global: foo = $foo"
Як бачимо, локальні змінні визначаються, перед назві змінної стоїть слово місцевий. Це створює змінну, яка є локальною для функції оболонки, в якій вона визначена. Потрапивши за межі функції оболонки, змінна більше не існує. Коли ми запускаємо цей скрипт, ми бачимо результати:
[me@linuxbox ~]$ локально-вар
глобальний: foo = 0 funct_1: foo = 1 глобальний: foo = 0 funct_2: foo = 2 глобальний: foo = 0
[me@linuxbox ~]$ локально-вар
глобальний: foo = 0 funct_1: foo = 1 глобальний: foo = 0 funct_2: foo = 2 глобальний: foo = 0
Ми бачимо, що присвоєння значень локальній змінній Foo в обох функціях оболонки не впливає на значення Foo визначені поза функціями.
Ця функція дозволяє писати функції оболонки так, щоб вони залишалися незалежними одна від одної та від сценарію, в якому вони з’являються. Це дуже цінно, оскільки допомагає запобігти перешкоджанню однієї частини програми іншій. Це також дозволяє писати функції оболонки, щоб їх можна було переносити. Тобто їх можна вирізати та вставляти від сценарію до сценарію, якщо потрібно.