Bash

為什麼在沒有“命令”的情況下從 cd(shell 函式)呼叫 cd(內置)會導致無限循環?

  • February 4, 2019

我曾經在 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 將崩潰。

引用自:https://unix.stackexchange.com/questions/498567