De sus otras preguntas, supongo que está utilizando OS X. El sistema de archivos HFS + predeterminado en OS X no distingue entre mayúsculas y minúsculas: no puede tener dos archivos llamados "abc" y "ABC" en el mismo directorio, y tratando de acceder cualquiera de los nombres llegará al mismo archivo. Lo mismo puede suceder con Cygwin o con sistemas de archivos que no distinguen entre mayúsculas y minúsculas (como FAT32 o ciopfs ) en cualquier lugar.
Como grepes un ejecutable real, se busca en el sistema de archivos (en los directorios de PATH). Cuando su shell busque /usr/bincualquiera de ellos grepo GREPencontrará el grepejecutable.
Los componentes integrados de Shell no se buscan en el sistema de archivos: debido a que están integrados, se accede a ellos a través de comparaciones de cadenas (sensibles a mayúsculas y minúsculas) dentro del propio shell.
Lo que estás encontrando es un caso interesante. Mientras que cdes un incorporado, se accede a mayúsculas y minúsculas, CDse encuentra como un ejecutable /usr/bin/cd. El cdejecutable es bastante inútil: debido a que cdafecta el entorno actual de ejecución del shell, siempre se proporciona como un shell incorporado regularmente , pero de todos modos hay un cdejecutable por el bien de POSIX , que cambia el directorio por sí mismo y luego termina inmediatamente, dejando el shell circundante donde empezó
Puede probar estos con el typeincorporado :
$ type cd
cd is a shell builtin
$ type CD
CD is /usr/bin/CD
typele dice qué hará el shell cuando ejecute ese comando. Cuando ejecutas cd, accedes al builtin, pero CDencuentra el ejecutable. Para otros componentes integrados, el componente integrado y el ejecutable serán razonablemente compatibles (intente echo), pero cdeso no es posible.
alias GREPowhich GREPproduce algo.