Области видимости и потоки
Переменные в рамках сценария имеют глобальный статус, но функции могут создавать собственные локальные переменные с помощью объявления local.
Следующий код используется для примера:
#!/bin/bash
function localizer {
echo "==> В функции localizer начальное значение а равно '$а' "
local а
echo "==> После объявления local значение а стало равным '$а' "
a="localizer version"
echo "==> При выходе из функции localizer значение а равно '$а' "
}
a="test"
echo "До вызова функции localizer значение а равно '$а' "
localizer
echo "После вызова функции localizer значение а равно '$а' "
По приведенным ниже результатам выполнения сценария scopetest.sh видно, что локальная версия переменной $а внутри функции localizer перезаписывает глобальную переменную $а. Глобальная переменная $а видна в функции localizer до тех пор, пока не встретится объявление local, т.е. объявление local работает как команда, которая в момент выполнения создает локальную переменную.
При запуске скрипта:
$ sh scopetest.sh
до вызова функции localizer значение а равно "test":
==> В функции localizer начальное значение а равно "test"
==> После объявления local значение а стало равным ""
==> При выходе из функции localizer значение а равно "localizer version".
После вызова функции localizer значение а равно "test".