Từ những câu hỏi khác của bạn, tôi cho rằng bạn đang sử dụng OS X. Hệ thống tệp HFS + mặc định trên OS X không phân biệt chữ hoa chữ thường: bạn không thể có hai tệp gọi là "abc" và "ABC" trong cùng thư mục và cố gắng truy cập một trong hai tên sẽ nhận được cùng một tập tin. Điều tương tự có thể xảy ra dưới Cygwin, hoặc với các hệ thống tệp không phân biệt chữ hoa chữ thường (như FAT32 hoặc ciopfs ) ở bất cứ đâu.
Bởi vì grep
là một thực thi thực sự, nó tìm kiếm trên hệ thống tập tin (trong các thư mục của PATH
). Khi vẻ ngoài vỏ của bạn trong /usr/bin
cho một trong hai grep
hoặc GREP
nó sẽ tìm ra grep
thực thi.
Các nội trang của Shell không được tra cứu trên hệ thống tập tin: bởi vì chúng được tích hợp sẵn, chúng được truy cập thông qua các so sánh chuỗi (phân biệt chữ hoa chữ thường) bên trong chính trình bao.
Những gì bạn gặp phải là một trường hợp thú vị. Trong khi cd
là một dựng sẵn, truy cập trường hợp nhạy cảm, CD
được tìm thấy như là một thực thi /usr/bin/cd
. Việc cd
thực thi là khá vô dụng: vì cd
ảnh hưởng đến môi trường thực thi shell hiện tại, nó luôn được cung cấp dưới dạng shell được tích hợp thường xuyên , nhưng dù sao cũng có thể cd
thực thi vì lợi ích của POSIX , nó thay đổi thư mục cho chính nó và sau đó chấm dứt ngay lập tức nó bắt đầu từ đâu
Bạn có thể thử những thứ này với type
nội dung :
$ type cd
cd is a shell builtin
$ type CD
CD is /usr/bin/CD
type
cho bạn biết shell sẽ làm gì khi bạn chạy lệnh đó. Khi bạn chạy, cd
bạn truy cập vào nội dung, nhưng CD
tìm thấy tệp thực thi. Đối với các nội dung khác, nội dung dựng sẵn và thực thi sẽ tương thích hợp lý (thử echo
), nhưng đối với cd
điều đó là không thể.
alias GREP
hoặcwhich GREP
đầu ra bất cứ điều gì.