Я думаю, что вы можете быть смущены по ряду направлений.
Настройка ALL_EXPORT (-a)
предназначена для setopt
, а не local
. Чтобы пометить переменную для экспорта с помощью local
, вы используете local -x
.
И вы тоже путаете направления распространения: -)
Определение переменной как локальной предотвратит выход ее жизни за пределы текущей функции (наружу или вверх в зависимости от того, как мыслит ваш разум).
Это не влияет на распространение переменной в подпроцессах, выполняемых внутри функции (внутрь или вниз).
Например, рассмотрим следующие сценарии qq.zsh
:
function xyz {
local LOCVAR1
local -x LOCVAR2
LOCVAR1=123
LOCVAR2=456
GLOBVAR=789
zsh qq2.zsh
}
xyz
echo locvar1 is $LOCVAR1
echo locvar2 is $LOCVAR2
echo globvar is $GLOBVAR
и qq2.zsh
:
echo subshell locvar1 is $LOCVAR1
echo subshell locvar2 is $LOCVAR2
Когда вы запускаете zsh qq.zsh
, вывод будет:
subshell locvar1 is
subshell locvar2 is 456
locvar1 is
locvar2 is
globvar is 789
так что вы можете видеть, что ни одна локальная переменная не выживет после возврата из функции. Однако автоматический экспорт локальных переменных в подпроцесс, вызываемый в xyz
, отличается. Один, помеченный для экспорта с local -x
, доступен в под-оболочке, другой - нет.