Bash
為什麼 Shell 內置命令不能以大寫字母執行,而其他命令可以?
為什麼是這樣?
當我這樣做時
CD ~/Desktop
它不會把我帶到桌面。但是這個:
echo "foo bar" | GREP bar
給我:
bar
根據您的其他問題,我認為您使用的是 OS X。OS X 上的預設 HFS+ 文件系統不區分大小寫:您不能在同一目錄中有兩個名為“abc”和“ABC”的文件,並嘗試訪問任何一個名稱都將到達同一個文件。在 Cygwin 下或在任何地方使用不區分大小寫的文件系統(如 FAT32 或ciopfs)都可能發生同樣的事情。
因為它是一個真正的執行檔,所以在文件系統(在 的目錄中)
grep
上查找它。PATH
當您的 shell 查找/usr/bin
其中一個時grep
,GREP
它會找到grep
執行檔。不會在文件系統上查找Shell 內置函式:因為它們是內置的,所以可以通過 shell 本身內部的(區分大小寫的)字元串比較來訪問它們。
你遇到的是一個有趣的案例。While
cd
是一個內置的,區分大小寫訪問,CD
作為執行檔被發現/usr/bin/cd
。cd
執行檔非常沒用:因為影響目前的cd
shell 執行環境,它總是作為 shell 正常內置提供,但無論如何為了 POSIX有一個cd
執行檔,它自己更改目錄然後立即終止,留下周圍的 shell它開始的地方。
type
你可以用內置的來試試這些:$ type cd cd is a shell builtin $ type CD CD is /usr/bin/CD
type
告訴您執行該命令時 shell 會做什麼。執行時,cd
您可以訪問內置程序,但CD
會找到執行檔。對於其他內置程序,內置程序和執行檔將相當兼容(嘗試echo
),但這cd
是不可能的。