Zsh手册提到选项-a意味着ALL_EXPORT,
ALL_EXPORT (-a, ksh: -a)Run Code Online (Sandbox Code Playgroud)All parameters subsequently defined are automatically exported.
虽然export使变量可用于子流程,但同一个变量如何foo是本地的?
Pau*_*ce. 15
在local -a,它-a具有与它相同的含义typeset:
-a
名称是指数组参数.可以通过这种方式创建数组参数,但可以不在typeset语句中将其指定.显示时,显示正常和关联数组.
pax*_*blo 14
我想你可能会在很多方面感到困惑.
该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
Run Code Online (Sandbox Code Playgroud)
并且qq2.zsh:
echo subshell locvar1 is $LOCVAR1
echo subshell locvar2 is $LOCVAR2
Run Code Online (Sandbox Code Playgroud)
运行时zsh qq.zsh,输出为:
subshell locvar1 is
subshell locvar2 is 456
locvar1 is
locvar2 is
globvar is 789
Run Code Online (Sandbox Code Playgroud)
所以你可以看到,本地变量都没有从函数返回.但是,将局部变量自动导出到内部调用的子进程xyz是不同的.标记为导出的local -x那个在子shell中可用,另一个不在.
| 归档时间: |
|
| 查看次数: |
3689 次 |
| 最近记录: |