gpt4 book ai didi

shell - "local -a foo"在 zsh 中是什么意思?

转载 作者:行者123 更新时间:2023-12-03 23:15:47 25 4
gpt4 key购买 nike

Zsh 手册提到了该选项 -a意味着 ALL_EXPORT ,

ALL_EXPORT (-a, ksh: -a)

  All parameters subsequently defined are automatically exported.  

虽然 export使变量可用于子流程,如何使用相同的变量 foo是本地人?

最佳答案

我认为您可能在许多方面感到困惑。
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 中可用,另一个不可用。

关于shell - "local -a foo"在 zsh 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3531668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com