どうしてこれなの?
私がこれをするとき
CD ~/Desktop
デスクトップが表示されません。しかしこれは:
echo "foo
bar" | GREP bar
私に与える:
bar
他の質問から、OS Xを使用していると思います。OSXのデフォルトのHFS +ファイルシステムでは大文字と小文字が区別されません。「abc」と「ABC」という2つのファイルを同じディレクトリに置いてアクセスしようとすることはできません。どちらの名前でも同じファイルになります。 Cygwin、または大文字と小文字を区別しないファイルシステム(FAT32や ciopfs など)でも同じことが起こります。
grep
は実際の実行可能ファイルであるため、ファイルシステム(PATH
のディレクトリ内)で検索されます。シェルが/usr/bin
grep
またはGREP
の場合、grep
実行可能ファイルが見つかります。
シェルのビルトインはではなくファイルシステムで検索されます:ビルトインされているため、シェル自体の内部で(大文字と小文字を区別する)文字列比較を通じてアクセスされます。
あなたが遭遇しているのは興味深いケースです。 cd
は組み込みで、大文字と小文字を区別してアクセスされますが、CD
は実行可能ファイルとして検出されます/usr/bin/cd
。 cd
実行可能ファイルはほとんど役に立ちません: cd
は現在のシェル実行環境に影響を与えるため、常にシェルの通常の組み込みとして提供されます ですが、cd
実行可能ファイル POSIXのために とにかく、それ自体のディレクトリを変更してすぐに終了し、周囲のシェルを開始した場所に残します。
type
builtin でこれらを試すことができます:
$ type cd
cd is a Shell builtin
$ type CD
CD is /usr/bin/CD
type
は、そのコマンドを実行したときにシェルが実行する処理を示します。 cd
を実行すると、組み込みにアクセスしますが、CD
は実行可能ファイルを見つけます。他のビルトインの場合、ビルトインと実行可能ファイルは相応に互換性があります(echo
を試してください)。ただし、cd
は不可能です。