4

我知道管道会创建子外壳。

我测试$BASH_SUBSHELLand $BASHPID,发现$BASH_SUBSHELL管道没有增加

echo $BASH_SUBSHELL         # 0
echo $BASHPID               # 8347

echo $BASH_SUBSHELL | cat   # 0
echo $BASHPID | cat         # 9727

(echo $BASH_SUBSHELL)       # 1
(echo $BASHPID)             # 9778
4

1 回答 1

1

当 bash 只是分叉、设置命令并执行它时,它不会将其视为子 shell。

对于任何类型的控制结构,如命令组、if 语句和 while 循环,shell 实际上必须在设置之外参与,它确实如此。

这在 bash 源代码中很明显,execute_command_internalexecute_cmd.c.

于 2013-05-30T19:46:44.120 回答