为什么$ BASH_SUBSHELL管道没有增加

时间:2013-05-21 10:29:04

标签: bash pipe subshell

我知道管道会创建子壳。

我测试$BASH_SUBSHELL$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

1 个答案:

答案 0 :(得分:1)

当bash只是forks,设置一个命令并执行它时,它不会将它视为子shell。

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

execute_command_internal中的bash来源execute_cmd.c可以看出这一点。