Недавно во время работы я заметил это поведение локальных переменных. Я написал этот фрагмент кода, чтобы упростить мои сомнения.Локальная переменная функции вызова доступна в вызываемой функции
foo() {
echo "This is moo : $MOO_VAR"
}
moo() {
local MOO_VAR="Hi MOO!"
foo
}
echo "calling moo."
moo
Я не могу понять, как функция foo
может получить доступ к значению локальной переменной MOO_VAR
функции moo
, хотя foo
не может изменить значение MOO_VAR
. Я не могу найти объяснения этого поведения. Может кто-нибудь объяснить, почему это происходит?
Но вы можете определить переменную 'local' в' foo' с тем же именем, ее значение будет восстановлено в конце функции. – choroba
Да, я это знаю. Но почему локальная переменная 'moo' доступна для' foo'. Разве не должен быть объем 'MOO_VAR' внутри' moo'. – molecule
Dunes, поэтому, если я изменю значение 'MOO_VAR' внутри' foo', оно изменит его значение, поскольку оно будет храниться в глобальном пространстве имен, и когда функция завершится, он просто повторно инициализирует его до своего первоначального значения, чтобы его использование в 'moo' остается незатронутым? – molecule