D'après vos autres questions, vous utilisez OS X. Le système de fichiers HFS + par défaut sur OS X ne tient pas compte de la casse: vous ne pouvez pas avoir deux fichiers nommés "abc" et "ABC" dans le même répertoire et essayez d'accéder au même répertoire. l'un ou l'autre nom ira au même fichier. La même chose peut arriver sous Cygwin ou avec des systèmes de fichiers insensibles à la casse (comme FAT32 ou ciopfs ) n’importe où.
Parce que grepest un vrai exécutable, il est recherché sur le système de fichiers (dans les répertoires de PATH). Lorsque votre shell cherche l’ /usr/binun grepou l’ autre, GREPil trouvera l’ grepexécutable.
Les éléments intégrés au shell ne sont pas examinés sur le système de fichiers: comme ils sont intégrés, ils sont accessibles via des comparaisons de chaînes (sensibles à la casse) dans le shell même.
Ce que vous rencontrez est un cas intéressant. While cdest intégré, accessible en respectant les majuscules et les minuscules, CDen tant qu’exécutable /usr/bin/cd. L' cdexécutable est plutôt inutile: étant donné qu'il cdaffecte l'environnement d'exécution actuel du shell, il est toujours fourni en tant que shell standard , mais il existe néanmoins un cdexécutable pour POSIX , qui change de répertoire pour lui-même et se termine immédiatement, laissant le shell environnant. où cela a commencé.
Vous pouvez les essayer avec le programme typeintégré :
$ type cd
cd is a shell builtin
$ type CD
CD is /usr/bin/CD
typevous indique ce que le shell fera lorsque vous exécuterez cette commande. Lorsque vous exécutez, cdvous accédez à la commande intégrée, mais vous trouvez CDle fichier exécutable. Pour les autres fonctions intégrées, celles-ci et l'exécutable seront raisonnablement compatibles (essayez echo), mais cdcela n'est pas possible.
alias GREPouwhich GREPsortez quelque chose.