Bash
為什麼在沒有“命令”的情況下從 cd(shell 函式)呼叫 cd(內置)會導致無限循環?
我曾經在 O’Reilly 的 Bash 書中讀到以下內容(我的總結):
命令並啟用
cd () { echo "Improved CD !" # Improvement one; command cd # Improvement two; # Do cool stuff... } cd
當包含內置函式的函式與內置函式同名時,該命令
command
很有用 - 它可以防止函式中內置函式的遞歸循環;我的問題是,如果我們只呼叫一次函式,為什麼首先會有遞歸循環?
如果你試試
cd () { echo "Improved CD !" # Improvement one; cd # Improvement two; # Do cool stuff... } cd
沒有
command
,cd
將呼叫該cd
函式,該函式將呼叫該cd
函式,該函式將呼叫該cd
函式,依此類推:cd
函式內部的語句呼叫該cd
函式,而不是cd
內置函式。您會看到“改進的 CD!” 在您的終端中反復作嘔。最終結果會因外殼而異:Zsh 將停止(“達到最大嵌套函式級別”),Bash 將崩潰。