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 grep
es un ejecutable real, se busca en el sistema de archivos (en los directorios de PATH
). Cuando su shell busque /usr/bin
cualquiera de ellos grep
o GREP
encontrará el grep
ejecutable.
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 cd
es un incorporado, se accede a mayúsculas y minúsculas, CD
se encuentra como un ejecutable /usr/bin/cd
. El cd
ejecutable es bastante inútil: debido a que cd
afecta el entorno actual de ejecución del shell, siempre se proporciona como un shell incorporado regularmente , pero de todos modos hay un cd
ejecutable 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 type
incorporado :
$ type cd
cd is a shell builtin
$ type CD
CD is /usr/bin/CD
type
le dice qué hará el shell cuando ejecute ese comando. Cuando ejecutas cd
, accedes al builtin, pero CD
encuentra el ejecutable. Para otros componentes integrados, el componente integrado y el ejecutable serán razonablemente compatibles (intente echo
), pero cd
eso no es posible.
alias GREP
owhich GREP
produce algo.