为什么BASH_SUBSHELL的值没有改变而SLVL的值改变了?

为什么BASH_SUBSHELL的值没有改变而SLVL的值改变了?

bash手册说

BASH_SUBSHELL 当 shell 开始在该环境中执行时,在每个子 shell 或子 shell 环境中加一。初始值为0。

SHLVL每次启动新的 Bash 实例时加一。这是为了计算 Bash shell 的嵌套深度。

这两个内置变量有什么区别?

具体来说,“subshel​​l 或 subshel​​l 环境”和“Bash shell”之间有什么区别?

下面的例子中,为什么 的值BASH_SUBSHELL没有变化,而 的值却SHLVL变化了?

$ echo $BASH_SUBSHELL
0
$ echo $SHLVL
1
$ bash
$ echo $BASH_SUBSHELL
0
$ echo $SHLVL
2

答案1

这是指主 shell 中的子 shell

比较

echo "a" $BASH_SUBSHELL "b" $SHLVL

( echo "a" $BASH_SUBSHELL "b" $SHLVL )

或者

( ( echo "a" $BASH_SUBSHELL "b" $SHLVL ) ) 

如果您设置环境变量,这可能在函数内部有用。

相关内容