2013-05-21 51 views
4

我知道管道會創建子shell。

我測試$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

'eval'echo $ BASH_SUBSHELL'|貓'或'{echo $ BASH_SUBSHELL} | cat'? – choroba

+0

@choroba它的工作原理,但爲什麼$ BASH_SUBSHELL不增加在我的例子 –

+2

我不知道。該變量可能在運行子shell之前由父shell擴展,但我找不到確切的文檔,我不打算搜索源:-) – choroba

回答

1

當bash僅僅叉,建立了一個命令,並execves它,它並不指望它作爲一個子shell。

對於任何類型的控制結構,如命令組,if語句和while循環,其中shell實際上必須超越安裝程序才能涉及。

這從bash源碼execute_command_internalexecute_cmd.c中很明顯。

相關問題