bash手册说
BASH_SUBSHELL 当 shell 开始在该环境中执行时,在每个子 shell 或子 shell 环境中加一。初始值为0。
SHLVL每次启动新的 Bash 实例时加一。这是为了计算 Bash shell 的嵌套深度。
这两个内置变量有什么区别?
具体来说,“subshell 或 subshell 环境”和“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 ) )
如果您设置环境变量,这可能在函数内部有用。