Локальные переменные

We use cookies. Read the Privacy and Cookie Policy

В сценариях, что нам доводилось писать до сих пор, все переменные (включая константы) были глобальными. Глобальные переменные существуют и доступны в любой точке программы. В некоторых случаях это безусловно полезное свойство осложняет использование функций. Внутри функций иногда желательно использовать локальные переменные. Локальные переменные доступны только внутри функции, в которой они определены, и прекращают свое существование по завершении выполнения функции.

Поддержка локальных переменных позволяет программисту использовать переменные с именами, которые уже определены в сценарии, глобально или в других функциях, не беспокоясь о возможных конфликтах имен.

Следующий пример сценария демонстрирует, как определяются и используются локальные переменные:

#!/bin/bash

# local-vars: сценарий, демонстрирующий локальные переменные

foo=0 # глобальная переменная foo

funct_1 () {

local foo # переменная foo, локальная для funct_1

foo=1

echo "funct_1: foo = $foo"

}

funct_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"

Как видите, локальные переменные объявляются добавлением слова local перед именем переменной. В результате создается переменная, локальная по отношению к функции, в которой она определена. Когда выполнение выйдет за пределы функции, переменная перестанет существовать. Если запустить этот сценарий, он выведет следующее:

[me@linuxbox ~]$ local-vars

global: foo = 0

funct_1: foo = 1

global: foo = 0

funct_2: foo = 2

global: foo = 0

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

Эта особенность позволяет писать функции, сохраняя их независимость друг от друга и от сценария, в котором они определяются. Это очень ценное качество, оно предотвращает взаимовлияние разных частей программы друг на друга, а кроме того, помогает писать переносимые функции, то есть функции, которые можно скопировать из одного сценария в другой.