我知道管道会创建子壳。
我测试$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
答案 0 :(得分:1)
当bash只是forks,设置一个命令并执行它时,它不会将它视为子shell。
对于任何类型的控制结构,比如命令组,if语句和while循环,shell实际上必须涉及到设置之外,它确实如此。
从execute_command_internal
中的bash来源execute_cmd.c
可以看出这一点。