Jim-chriss Charles Asked: 2019-04-24 13:15:34 +0800 CST2019-04-24 13:15:34 +0800 CST 2019-04-24 13:15:34 +0800 CST 从脚本本身中识别 shell 脚本的子 shell 编号 772 我不小心想从脚本本身中显示子shell编号(BASH_SUBSHELL),但我得到了子shell 0 这是脚本的行 echo "Operated from subshell: $BASH_SUBSHELL 终端中 shell 的部分输出 echo '从子shell操作:0' 从子shell操作:0 问题是否可以从脚本本身中显示脚本正在运行的子shell? bash shell 2 个回答 Voted glenn jackman 2019-04-24T13:29:57+08:002019-04-24T13:29:57+08:00 下面是一些实际使用一些 subhell 的代码: echo "main shell: $BASH_SUBSHELL" ( echo "first subshell: $BASH_SUBSHELL" ( echo "second subshell: $BASH_SUBSHELL" ( echo "third subshell: $BASH_SUBSHELL" ) ) ) Best Answer Michael Homer 2019-04-24T13:49:47+08:002019-04-24T13:49:47+08:00 由于脚本不在子 shell 中运行,因此该输出是正确的。子shell是由一些东西创建的,包括括号( ... )、背景&和命令替换$( ... ),但不是通过启动脚本:它创建一个全新的shell来执行脚本。 您可能想到的是变量SHLVL,它会随着脚本(和 shell)的每一层递增: SHLVL每次启动一个新的 Bash 实例时加一。这旨在计算您的 Bash shell 嵌套的深度。 如果您的脚本行是 echo "Operated from shell level: $SHLVL" 那么你会得到我认为你期望的输出。如果脚本递归,$SHLVL每次都会递增。
下面是一些实际使用一些 subhell 的代码:
由于脚本不在子 shell 中运行,因此该输出是正确的。子shell是由一些东西创建的,包括括号
( ... )
、背景&
和命令替换$( ... )
,但不是通过启动脚本:它创建一个全新的shell来执行脚本。您可能想到的是变量
SHLVL
,它会随着脚本(和 shell)的每一层递增:如果您的脚本行是
那么你会得到我认为你期望的输出。如果脚本递归,
$SHLVL
每次都会递增。