Os nomes de subcomando do Unix devem fazer distinção entre maiúsculas e minúsculas?

3

Comandos como git , hg e apt-get têm subcomandos (existe um nome melhor?) e todos são sensíveis a maiúsculas e minúsculas:

hg log                    # not hg Log
git status                # not git Status
sudo apt-get install nano # not sudo apt-get Install nano

Obviamente, muitas coisas no Unix precisam ser sensíveis a maiúsculas e minúsculas, porque é como o Unix é .

Mas neste caso, não há ambigüidade potencial. Esses argumentos podem ser apenas nomes de comandos e não podem ser mais nada (podem?). A mensagem de erro git sugere que esse é o caso:

> git Status
git: 'Status' is not a git command. See 'git --help'.

Did you mean this?
        status

Além de adicionar um pouco mais de frustração para iniciantes e estar em conformidade com a cultura Unix, existe alguma razão para diferenciar maiúsculas de minúsculas?

    
por jtpereyda 26.03.2014 / 01:02

3 respostas

8

is there any reason to be case-sensitive?

Ele deixa um namespace muito maior disponível. Por exemplo, uma versão posterior do git poderia implementar variações de letras maiúsculas em nomes de comandos ou permitir que o usuário defina macros / aliases, como no shell, onde você pode definir seus próprios MV , CP etc. redefinir mv , cp , etc.

    
por 26.03.2014 / 19:38
8

A distinção entre maiúsculas e minúsculas faz parte da maneira POSIX de manipular o comando e o argumento que não tem nada a ver com o significado.

É uma coisa muito boa que Status e status não sejam os mesmos, porque o sistema de arquivos que tipo de base no sistema faz distinção entre maiúsculas e minúsculas (por causa das regras POSIX). Geralmente é uma boa prática manter o mesmo comportamento em todo o seu sistema.

Assim, por exemplo, se seu segundo argumento puder ser um nome de arquivo ou uma palavra-chave, você poderia considerar que a palavra-chave é aceitável ou não? Seria uma bagunça tão grande ter comandos que aceitam argumentos de casos específicos em algum momento e às vezes não.

A última coisa importante sobre a sensibilidade chave, na minha opinião, é o fato de que, se digitar ls -L , você pode definir isso sozinho e realmente deseja digitá-lo com um L e o sistema nunca deve tentar adivinhar e sempre execute o que você digita.

    
por 26.03.2014 / 01:07
5

Veja de outra perspectiva. O computador não tem conhecimento de linguagem ou letras, o que ele vê são números que são mapeados para os caracteres. Enquanto eu (a letra I ) e | (o tubo) pode parecer muito semelhante a você, eles são completamente diferentes do computador.

Para ilustrar, dê uma olhada na tabela abaixo. Você verá que não há correspondência entre o código para uma letra maiúscula e a letra minúscula correspondente. Eles não são consecutivos, eles são representados por códigos completamente diferentes (tabela source ):

Em outras palavras, embora a e A possam parecer a mesma coisa para você, eles não são para um computador.

    
por 26.03.2014 / 06:01