Das suas outras perguntas, suponho que você esteja usando o OS X. O sistema de arquivos HFS + padrão no OS X não diferencia maiúsculas de minúsculas: você não pode ter dois arquivos chamados "abc" e "ABC" no mesmo diretório e tentando acessar qualquer nome chegará ao mesmo arquivo. O mesmo pode acontecer no Cygwin ou em sistemas de arquivos que não diferenciam maiúsculas de minúsculas (como FAT32 ou ciopfs ) em qualquer lugar.
Por grep
ser um executável real, ele foi procurado no sistema de arquivos (nos diretórios de PATH
). Quando o seu shell procurar /usr/bin
por um grep
ou GREP
encontrará o grep
executável.
Os componentes internos do shell não são pesquisados no sistema de arquivos: como são integrados, eles são acessados através de comparações de strings (com distinção entre maiúsculas e minúsculas) dentro do próprio shell.
O que você está encontrando é um caso interessante. Enquanto cd
é um builtin, acessado com distinção entre maiúsculas e minúsculas, CD
é encontrado como um executável /usr/bin/cd
. O cd
executável é bastante inútil: porque cd
afeta o ambiente atual de execução do shell, ele sempre é fornecido como um shell regular , mas existe um cd
executável para o bem do POSIX , que altera o diretório por si mesmo e termina imediatamente, deixando o shell ao redor onde começou.
Você pode experimentá-los com o type
builtin :
$ type cd
cd is a shell builtin
$ type CD
CD is /usr/bin/CD
type
informa o que o shell fará quando você executar esse comando. Quando você executa, cd
você acessa o builtin, mas CD
encontra o executável. Para outros buildins, o builtin e o executável serão razoavelmente compatíveis (try echo
), mas, para cd
isso, não é possível.
alias GREP
ouwhich GREP
produz alguma coisa.