Области видимости и потоки

Переменные в рамках сценария имеют глобальный статус, но функции могут создавать собственные локальные переменные с помощью объявления 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".