З ваших інших питань я вважаю, що ви використовуєте OS X. Файлова система HFS + за замовчуванням в OS X не чутлива до регістру: ви не можете мати два файли під назвою "abc" та "ABC" в одному каталозі та намагаєтеся отримати доступ будь-яке ім’я потрапить до одного файлу. Те ж саме може статися під Cygwin або з нечутливими до регістру файловими системами (наприклад, FAT32 або ciopfs ) де завгодно.
Оскільки grep
це справжній виконуваний файл, його шукають у файловій системі (у каталогах PATH
). Коли ваша оболонка шукає /usr/bin
будь-яку grep
або GREP
вона знайде grep
виконуваний файл.
Ці команди НЕ дивилися на файлової системи: бо вони вбудовані, вони доступні через (чутливо до регістру) порівняння рядків усередині самої оболонки.
Що ви стикаєтесь - цікавий випадок. Хоча 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
щось виведіть.