gpt4 book ai didi

bash - 关于 $SHLVL 的 Zsh 怪异

转载 作者:行者123 更新时间:2023-11-29 09:21:38 29 4
gpt4 key购买 nike

有人可以解释以下行为吗?

$ echo $SHLVL
1
$ zsh -c 'echo $SHLVL'
2
$ zsh -c '(echo $SHLVL)'
1

我不明白最后的结果。 zsh 是否为 () 子 shell 重置 $SHLVL?Bash 结果不同:

$ echo $SHLVL
1
$ bash -c 'echo $SHLVL'
2
$ bash -c '(echo $SHLVL)'
2

至少,这看起来更合乎逻辑。在一个案例中,当我测试这个时,我期望最后的结果是 3。为什么没有 shell 给出那个结果?我对 $SHLVL 有什么误解?

最佳答案

在 bash 中,变量 SHLVL 不会为子 shell 递增,参见 abs guide .对于嵌套子 shell,请参阅 BASH_SUBSHELL

在 zsh 中,文档说 SHLVL 计算 shell 的数量,参见 here ,令人惊讶的是,ZSH_SUBSHELL 计算嵌套子 shell,请参阅 here .

对我来说,zsh 子 shell 中 SHLVL 的递减效果是一个错误;另一种可能性是可能会添加 SHLVLZSH_SUBSHELL(未记录的功能?)。

$ zsh -c 'print $SHLVL $ZSH_SUBSHELL ; (print $SHLVL $ZSH_SUBSHELL)'
2 0
1 1

关于bash - 关于 $SHLVL 的 Zsh 怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26689364/

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