Mic*_*mer 71

根据您的其他问题,我认为您使用的是 OS X。 OS X 上的默认 HFS+ 文件系统不区分大小写:您不能在同一目录中拥有两个名为“abc”和“ABC”的文件,并尝试访问任何一个名称都将到达同一个文件。在 Cygwin 下或在任何地方使用不区分大小写的文件系统(如 FAT32 或ciopfs)时,都会发生同样的事情。

因为grep是一个真正的可执行文件,它在文件系统(在 的目录中PATH)进行了查找。当您的 shell 查找/usr/bin其中一个grepGREP它时,它将找到grep可执行文件。

不会在文件系统上查找Shell 内置函数:因为它们是内置的,因此可以通过 Shell 本身内部的(区分大小写的)字符串比较来访问它们。

您遇到的是一个有趣的案例。Whilecd是一个内置的,区分大小写的访问,CD被发现为一个可执行文件/usr/bin/cd。该cd可执行文件是相当无用的:因为cd影响当前shell执行环境,它总是作为一个shell提供常规内置,但有一个cd可执行的POSIX的缘故,无论如何,这对于本身的变化目录,然后立即终止,留下周围的外壳它开始的地方。

您可以使用type内置函数尝试这些:

$ type cd
cd is a shell builtin
$ type CD
CD is /usr/bin/CD
Run Code Online (Sandbox Code Playgroud)

type告诉您运行该命令时 shell 将执行的操作。当您运行时,cd您会访问内置函数,但会CD找到可执行文件。对于其他内置函数,内置函数和可执行文件将相当兼容(尝试echo),但这cd是不可能的。

  • 51个赞!我应该只是发布一个答案,而不是发表评论:) (2认同)