Z pozostałych twoich pytań rozumiem, że używasz OS X. Domyślny system plików HFS + w OS X nie rozróżnia wielkości liter: nie możesz mieć dwóch plików o nazwach „abc” i „ABC” w tym samym katalogu i próbować uzyskać dostęp każda nazwa przejdzie do tego samego pliku. To samo może się zdarzyć w Cygwin lub w systemach plików bez rozróżniania wielkości liter (takich jak FAT32 lub ciopfs ) w dowolnym miejscu.
Ponieważ grep
jest to prawdziwy plik wykonywalny, został sprawdzony w systemie plików (w katalogach PATH
). Kiedy twoja powłoka szuka /usr/bin
jednego z nich grep
lub GREP
znajdzie grep
plik wykonywalny.
Wbudowane powłoki nie są wyszukiwane w systemie plików: ponieważ są wbudowane, są one dostępne poprzez porównania łańcuchów (z rozróżnianiem wielkości liter) w samej powłoce.
To, co napotykasz, jest ciekawym przypadkiem. Chociaż cd
jest wbudowany, dostępny z rozróżnianiem wielkości liter, CD
można go znaleźć jako plik wykonywalny /usr/bin/cd
. Plik cd
wykonywalny jest dość bezużyteczny: ponieważ cd
wpływa na bieżące środowisko wykonywania powłoki, zawsze jest dostarczany jako zwykła wbudowana powłoka , ale mimo to istnieje cd
plik wykonywalny ze względu na POSIX , który zmienia katalog dla siebie, a następnie natychmiast kończy działanie, pozostawiając otaczającą powłokę gdzie to się zaczęło.
Możesz wypróbować te z type
wbudowanym :
$ type cd
cd is a shell builtin
$ type CD
CD is /usr/bin/CD
type
mówi ci, co zrobi powłoka po uruchomieniu tego polecenia. Po uruchomieniu cd
uzyskujesz dostęp do wbudowanego, ale CD
znajduje plik wykonywalny. W przypadku innych wbudowanych wbudowane i pliki wykonywalne będą w miarę kompatybilne (try echo
), ale cd
nie jest to możliwe.
alias GREP
czywhich GREP
coś wyprowadzasz.