为什么 cd 会调用函数“:”?

Why might cd call the function ':'?

我正在使用 Ubuntu (Amazon EC2),当我键入 cd 时,会发生这种情况:

$ cd
hi
hi
hi
hi
hi
hi
hi
hi
hi
$

我以前做过:是一个函数:: () { echo hi; }

这发生在顶级 shell $SHLVL=1,但不会发生在任何子 shell(键入 bash 然后尝试重现它不起作用)。

有人知道为什么会这样吗?

你做的是一个非常糟糕的主意,因为 : 是 shell 空命令。

它有时在需要命令的结构中很有用。例如,如果您想使用 while 编写一个无限循环代码,它会有所帮助:

while true ; do
  :
done

去掉:就不是well-formed了:do需要命令。以下三个one-liners中,只有最后一个是正确的——试一试:

while true do done
while true do ; done
while true do : ; done

如果您将 : 重新定义为一个函数,一个很好的问题是:它定义得好吗?但没关系,假设它有效。突然间,这些不时出现在脚本中的 : 将调用您的函数!

Amazon EC2 shell 环境中的 cd 是什么?也许这是一个功能。输入 set 并浏览输出。我经常定义一个自定义 cd 函数;这很有用。您可以执行动态更新提示和 window 标题等操作。