Ответ 1
Я думаю, вы можете быть смущены на нескольких фронтах.
Значение 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
, другой - нет.