他の質問から、OS Xを使用していると考えています。OSXのデフォルトのHFS +ファイルシステムは大文字と小文字を区別しません。同じディレクトリに「abc」と「ABC」という2つのファイルを配置して、どちらの名前も同じファイルになります。同じことがCygwinの下でも、大文字と小文字を区別しないファイルシステム(FAT32やciopfsなど)でも発生する可能性があります。
grep
実際の実行可能ファイルであるため、ファイルシステム(のディレクトリ内PATH
)で検索されます。シェルが/usr/bin
どちらgrep
かGREP
を探すか、grep
実行可能ファイルを見つけます。
シェルのビルトインはファイルシステムで検索されません。ビルトインされているため、シェル自体の内部で(大文字と小文字を区別する)文字列比較を介してアクセスされます。
あなたが遭遇しているのは興味深いケースです。while cd
は大文字と小文字を区別してアクセスされる組み込みでCD
、実行可能ファイルとして検出されます/usr/bin/cd
。cd
実行可能ファイルはかなり無駄です:ので、cd
現在のシェル実行環境に影響を与え、それは常にシェルとして提供され、通常のビルトインが、そこでcd
実行可能なPOSIXのために自分自身のためにディレクトリを変更し、その後すぐに終了し、とにかくは、周囲のシェルを残して、それが始まった場所。
これらをtype
ビルトインで試すことができます:
$ type cd
cd is a shell builtin
$ type CD
CD is /usr/bin/CD
type
そのコマンドを実行したときにシェルが何をするかを示します。実行cd
すると、ビルトインにアクセスしますCD
が、実行可能ファイルが見つかります。他のビルトインの場合、ビルトインと実行可能ファイルはかなり互換性があります(試してみてくださいecho
)が、cd
それは不可能です。
alias GREP
またはwhich GREP
出力します。