Zsh手册提到选项-a
表示ALL_EXPORT
,
ALL_EXPORT (-a, ksh: -a)
All parameters subsequently defined are automatically exported.
虽然export
使变量可用于子流程,但同一变量foo
如何是本地变量?
答案 0 :(得分:13)
我想你可能会在很多方面感到困惑。
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
的那个在子shell中可用,另一个不在。
答案 1 :(得分:13)
在local -a
中,-a
与typeset
的含义相同:
-a
名称指的是数组参数。数组参数 可以这种方式创建,但可能不会分配给 排版声明。显示时,正常和 显示了关联数组。