为什么在没有“命令”的情况下从 cd(shell 函数)调用 cd(内置)会导致无限循环?

-1 bash cd-command command syntax bash-functions

我曾经在 O'Reilly 的一本 Bash 书中读到以下内容(我的总结):

命令和启用

cd () {
    echo "Improved CD !"
    # Improvement one;
    command cd
    # Improvement two;
    # Do cool stuff...
}
cd
Run Code Online (Sandbox Code Playgroud)

command当包含内置函数的函数与内置函数同名时,该命令很有用 - 它可以防止函数中内置函数的递归循环;

我的问题是,如果我们只调用一次函数,为什么首先会出现递归循环?

Ste*_*itt 10

如果你试试

cd () {
    echo "Improved CD !"
    # Improvement one;
    cd
    # Improvement two;
    # Do cool stuff...
}
cd
Run Code Online (Sandbox Code Playgroud)

没有 commandcd会调用cd函数,会调用cd函数,会调用cd函数,依此类推:cd函数内部的语句调用cd函数,而不是cd内置的。您会看到“改进的 CD!” 在您的终端中重复令人作呕。

最终结果将因外壳而异:Zsh 将停止(“达到最大嵌套函数级别”),Bash 将崩溃。