我无意中想要从脚本本身中揭示子 shell 编号 (BASH_SUBSHELL),但我得到了 subshell 0
这是脚本的行
echo "Operated from subshell: $BASH_SUBSHELL
终端中 shell 的部分输出
- echo '从子shell操作:0' 从子shell操作:0
问题是否有可能显示脚本本身正在运行的子 shell?
答案1
由于脚本不在子 shell 中运行,因此此输出是正确的。子 shell 是通过一些东西创建的,包括括号( ... )
、背景&
和命令替换$( ... )
,但不是通过启动脚本创建的:这会创建一个全新的 shell 来执行脚本。
你可能想到的是变量SHLVL
, 哪个做每层脚本(和 shell)的增量:
SHLVL
每次启动新的 Bash 实例时加一。这是为了计算 Bash shell 的嵌套深度。
如果你的脚本行是
echo "Operated from shell level: $SHLVL"
那么你会得到我认为你期望的输出。如果脚本递归,则$SHLVL
每次都会递增。
答案2
下面是一些实际使用一些子地狱的代码:
echo "main shell: $BASH_SUBSHELL"
(
echo "first subshell: $BASH_SUBSHELL"
(
echo "second subshell: $BASH_SUBSHELL"
(
echo "third subshell: $BASH_SUBSHELL"
)
)
)