Por que o terminal diferencia maiúsculas de minúsculas?


12

Quando eu faço - em CD ..vez de cd ..
isso me dá um erro dizendo -

CD: command not found

Por que o terminal diferencia maiúsculas de minúsculas quando se trata de comandos linux? Quero dizer que você deve ser capaz de executar o comando com caracteres "all uppercase" ou "all lowercase".

Eu sei que é devido a algum motivo, mas estou apenas curioso.


9
Eu quase sinto que essa pergunta deve ser renomeada. Por que as coisas diferenciam maiúsculas de minúsculas?
kojiro

15
"Quero dizer que você deve ser capaz de executar o comando com caracteres" all uppercase "ou" all lowercase "." Verdade? Por quê?
dmckee --- ex-moderador gatinho

5
Emitir um stty iuclc olcucse você sentir vontade de ter um terminal insensível caso ;-)
Stéphane Chazelas

1
CapsLock + c + d + CapsLock é pior do que c + d
UniversallyUniqueID

Respostas:


43

Por fim, foi uma escolha arbitrária feita pelos criadores do Unix há mais de quatro décadas. Eles poderiam ter optado por tornar as coisas sem distinção entre maiúsculas e minúsculas, como os criadores do MS-DOS fizeram uma década depois, mas isso também tem suas desvantagens.

Está profundamente enraizado na cultura * ix para mudar agora. A questão do sistema de arquivos com distinção entre maiúsculas e minúsculas levantada pelo eppesuig é apenas parte dela. Os sistemas macOS - que são baseados em Unix - geralmente têm sistemas de arquivos que não diferenciam maiúsculas de minúsculas (mas preservam maiúsculas e minúsculas); portanto, esses comandos de sistemas externos ao shell são de fato tratados sem distinção entre maiúsculas e minúsculas. Porém, os componentes internoscd permanecem sensíveis a maiúsculas e minúsculas.

Mesmo com um sistema de arquivos que não diferencia maiúsculas de minúsculas, a história das coisas conspira contra seus desejos, Hussain. Se eu digitar lsno meu Mac, recebo uma lista de diretórios coloridos. Se eu digitar LS, /bin/lsainda será executado, mas a listagem não será colorida porque o alias que adiciona o -Csinalizador diferencia maiúsculas de minúsculas.

Melhor apenas se acostumar com isso. Se puder, aprenda a gostar.


1
Na verdade, os nomes de arquivos do Windows podem fazer distinção entre maiúsculas e minúsculas. Eles estão no subsistema POSIX, por exemplo, e consulte msdn.microsoft.com/en-us/library/ee681827%28v=vs.85%29.aspx
fpmurphy

3
Na verdade, é surpreendente, já que alguns terminais comuns disponíveis na época estavam apenas em maiúsculas e eles tiveram que implementar uma solução alternativa (coloque uma barra invertida antes de uma letra se quiser que ela seja realmente maiúscula - ativada se você digitar seu nome de usuário em maiúsculas quando fizer o logon in) no driver de disciplina de linha.
usar o seguinte comando

8

Este não é um problema "terminal", é um recurso do sistema de arquivos. Como o shell deve procurar seus comandos no sistema de arquivos (sempre diferencia maiúsculas de minúsculas)?


E se dois ou mais comandos corresponderem?
Scai

1
A única opção que pode ajudá-lo um pouco é uma bashopção chamada cdspell: tente encontrar o nome de arquivo correto, mesmo que você tenha digitado errado, mas está funcionando apenas para argumentos de comando .
eppesuig

1
@HussainTamboli pode haver comandos nomeada cd, CD, cDe Cdcada um com um comportamento único.
Scai

6
Não é realmente um recurso de sistema de arquivos ou de terminal - é um recurso de shell. Os componentes internos do shell diferenciam maiúsculas de minúsculas em um sistema de arquivos que não diferencia maiúsculas de minúsculas. Além disso, a maioria dos comandos de hash de shells, portanto, os comandos nunca são realmente arquivos, eles são realmente extraídos de um hash. Tente hash -p /bin/hostname HOSTNAMEe agora HOSTNAMEé o comando para /bin/hostname.
kojiro

2
Ah, eu também devo mencionar que você pode dizer que a maioria das conchas é menos sensível a maiúsculas e minúsculas. Para o bash, você pode vincular set completion-ignore-case on.
kojiro

6

Os sistemas técnicos que eu uso e respeito quase fazem distinção entre maiúsculas e minúsculas: seja sistema operacional ou linguagem de programação ou qualquer outra coisa.

As exceções que eu pude pensar agora são as tags HTML e algumas implementações do SQL e a linguagem de programação Ada.

Mesmo nesses casos, acho que há fortes tendências para realmente escrever tags HTML em minúsculas e a semântica de consultas SQL em maiúsculas (e parâmetros em maiúsculas). (Corrija-me se estiver errado.) Quanto ao Ada, o modo Emacs o corrigirá se você digitar, por exemplo, um nome de procedimento em minúsculas, embora isso não importe ao compilar. Portanto, mesmo quando há distinção entre maiúsculas e minúsculas, parece que as pessoas concordam que é uma má ideia.

O motivo é que você obtém um poder muito mais expressivo com distinção entre maiúsculas e minúsculas. Não só quantitativamente - CDé um, mas CD, Cd, cD, e cdsão quatro - mas mais importante, você pode expressar propósito, a ênfase, etc. usando maiúsculas e minúsculas de forma sensata; Além disso, ao programar, você aprimora a legibilidade.

Intuitivamente, é claro que você não ler hie HIda mesma maneira!

Mas, para dar um exemplo no mundo dos computadores, na linguagem de programação Ada (da década de 1980), a primeira linha de um bloco de código de procedimento pode ser assim:

procedure body P(SCB : in out Semaphore_Control_Block) is

como você vê, os nomes dos procedimentos e dos parâmetros são maiúsculos, assim como os tipos de dados, tudo o resto é minúsculo. Observe também que o nome do parâmetro "all uppercase" nos diz que é um acrônimo. Agora, compare isso com

procedure body p(scb : in out semaphore_control_block) is

Isso é possível, pois o Ada não diferencia maiúsculas de minúsculas (ou, para ser exato, o compilador o mudará para o primeiro exemplo, mas é claro que não mudará seu código). Ou, que tal:

PROCedure body P(Scb : IN Out semaphore_CONTROL_BLOCK) iS

Esse é um pouco ridículo, eu sei; mas alguém seria estúpido o suficiente para escrever dessa maneira (bem, talvez não). A questão é que um sistema que diferencia maiúsculas de minúsculas não apenas força as pessoas a serem consistentes, mas também é ajudado por elas (legibilidade) e as utiliza em proveito próprio (exemplo de acrônimo acima).


2
Pascal e Delphi também não diferenciam maiúsculas de minúsculas. Além disso, tendo por exemplo duas variáveis lengthe Lengthgeralmente é uma má idéia :)
Ajasja

@Ajasja: Isso é interessante, porque Ada é muito parecido com Pascal. Bem, acho que se você contasse todas, haveria toneladas dessas linguagens, porque existem muitas linguagens de programação. Quanto à duração, é claro - mas você poderia pensar em um caso como esse: e Max (uma pessoa) e max (uma função que pega uma lista de reais e retorna a maior)?
Emanuel Berg

Em relação ao seu último exemplo, você pode estar interessado em saber que o interpretador SuperBasic da QL colocou em maiúsculas as palavras-chave exatamente dessa maneira: DEFine PROCedure Hellopor exemplo. Você só precisava digitar os bits em maiúscula, mas a palavra completa aparecia nas listagens de programas. Este aplicado a REMark, também, e não era tão chato ...
David Dada

4

Não é mais ou menos estranho do que o fato de termos um alfabeto maiúsculo e minúsculo. Se você olhar /usr/bin, notará que alguns executáveis ​​exploram letras maiúsculas.

Um espaço para nome com distinção entre maiúsculas e minúsculas não é apenas duas vezes maior que um espaço insensitivo - a diferença cresce exponencialmente com o tamanho da palavra. Por exemplo, usando 26 caracteres, existem 26 ^ 3 (17576) possibilidades diferentes em três letras; usando 52 (2 * 26) caracteres, existem 52 ^ 3 = 140608. Um espaço para nome aberto é uma coisa boa;)


De onde você tirou os 3?
Ctrl-alt-delor 18/04/19

@ ctrl-alt-delor É apenas um exemplo: "existem 26 ^ 3 (17576) possibilidades diferentes em três letras ".
GOLDILOCKS

2

O conceito de maiúsculas / minúsculas pode ser (e é de fato) uma coisa específica de localidade, que, como qualquer outra complicação de design, deve ser empurrada o mais próximo possível do ponto de uso na pilha de aplicativos, não fazer parte do testemunho.

Ter um ambiente que diferencia maiúsculas de minúsculas permite envolvê-lo em um ambiente que não diferencia maiúsculas de minúsculas, mas não o contrário.


1

Não é o terminal, é o sistema de arquivos. Ou no caso de cd(cd é um shell incorporado) o shell, que diferencia maiúsculas de minúsculas.

Poderia ter sido possível (pelo menos com ASCII), fazer distinção entre maiúsculas e minúsculas. Isso é mais difícil com o unicode agora usado (se dois caracteres são iguais, podem depender do local).

o que fazer sobre isso

  • Vive com isso.
  • Experimente estas opções de shell. Eles comprometem e facilitam as coisas, sem apresentar todos os problemas de insensibilidade a maiúsculas e minúsculas.
    • shopt -s nocaseglob #isso está na minha ~/.bashrc
    • shopt -s nocasematch #estaria também em ~/.bashrc
    • set completion-ignore-case on #isso está na minha ~/.inputrc

-2

Como ponto de partida, o motivo pelo qual essa pergunta foi feita e o motivo pelo qual você encontrará muita discussão se pesquisar no assunto é que a distinção entre maiúsculas e minúsculas torna mais difícil para as pessoas "normais" aprenderem e usarem uma linguagem de programação ou linha de comando interface.

A distinção entre maiúsculas e minúsculas tem origem no baixo poder dos computadores no passado. Para tornar as coisas sem distinção entre maiúsculas e minúsculas, era necessária uma operação de análise adicional antes que o comando fosse enviado ao intérprete ou a um compilador antes de sua execução e os primeiros projetistas não estavam preparados para desperdiçar a energia do computador para a conveniência da distinção entre maiúsculas e minúsculas.

Eu acredito que há uma série de afirmações incorretas nos comentários feitos acima. Em primeiro lugar, os psicólogos lhe dirão que os humanos não discriminam automaticamente entre uma palavra escrita em letras maiúsculas ou minúsculas ou mesmo uma combinação das duas em termos de significado da palavra. Case é usado em linguagens expressivas normais para transmitir um significado adicional. Por exemplo, o uso de uma letra maiúscula iniciando uma palavra em uma frase indica que provavelmente é um nome próprio. Letras maiúsculas também são usadas para dar estrutura à prosa. Por exemplo, uma letra maiúscula é usada para indicar o início de uma frase. Mas "Palavra" e "palavra" são vistas pela mente humana como significando o mesmo.

Os criadores do DOS e da ADA e Pascal, para citar alguns, gostaram do fato de que a distinção entre maiúsculas e minúsculas era um fardo adicional para o iniciante. Mais tarde, os editores de texto em "Ambientes de Desenvolvimento Integrado" (IDEs), reconhecendo uma palavra de reserva, poderiam reformular essa palavra de modo que fosse consistente com o estilo; além de exibi-lo em uma cor diferente para destacar a palavra. Portanto, o argumento de que a distinção entre maiúsculas e minúsculas cria um código mais legível é falacioso. Não é para pessoas "normais". Ele simplesmente adiciona uma camada desnecessária e às vezes confusa a uma tarefa já exigente.

Java é um exemplo extremo de uma linguagem muito ruim do ponto de vista da facilidade de uso por um iniciante. Ele impõe uma estrita distinção entre maiúsculas e minúsculas, mas, estupidamente, permitirá que o programador tenha duas funções, ambas com o mesmo nome, mas que na verdade são funções diferentes em virtude de um ter um conjunto diferente de argumentos para o outro. De fato, Java é um aborto tão grande que, quando as universidades passaram do ensino da sintaxe de Pascal para os estudantes, realizando cursos de ciências não relacionadas à computação, a taxa de aprovação caiu de 70% para 40%.

Então, em resumo, a distinção entre maiúsculas e minúsculas surgiu por dois motivos. Um deles foi a falta de energia do computador. A segunda foi que as pessoas que ingressam na ciência da computação geralmente estão no espectro autista e não se relacionam bem com as necessidades das pessoas "normais". Como conseqüência, essas pessoas não podem compreender que a distinção entre maiúsculas e minúsculas é desnecessária e um impedimento para aprender e usar uma linguagem de programação.


Eu removeria a seção em Java porque ela é baseada em opiniões e além do ponto (a sobrecarga de método tem pouco a ver com distinção entre maiúsculas e minúsculas) ... a sobrecarga de método / função também é encontrada em outras linguagens, como C ++ e pl / sql para citar apenas dois. Quanto ao seu parágrafo de psicologia, acho que as fontes seriam boas ... Finalmente, o último parágrafo é, imho, baseado em opiniões e ofensivo e deve ser removido.
Thecarpy 29/03/19

Para entender melhor por que C e todos os idiomas que foram gerados causaram danos à causa da ciência da computação, acesse; linkedin.com/pulse/… O cerne deste problema, ou devo dizer o kernel :-), é que os programadores são de um tipo de personalidade não preocupados em espalhar conhecimento, mas em fazer um trabalho. Se você não concorda com o que foi dito neste post, apresente um argumento para fundamentar suas posturas. As opiniões contam pouco.
precisa

Concordo que a distinção entre maiúsculas e minúsculas dificulta o aprendizado. Mas observe que quase tudo no Unix é minúsculo, então mantenha assim. Uma grande exceção é que as variáveis ​​de ambiente são convencionalmente todas as capitais.
Ctrl-alt-delor 18/05/19

O caso deve ser usado de forma consistente e, como dito nesta resposta, para transmitir informações extras, por exemplo, variável de ambiente versus variável normal do shell.
Ctrl-alt-delor 18/05/19

-2

A distinção entre maiúsculas e minúsculas é uma idéia tola que surgiu porque os escritores do Unix não entendiam que o ASCII foi projetado para ser facilmente insensível a maiúsculas e minúsculas. Um simplesmente ignora os bits iniciais. Ascii é uma codificação de 7 bits com capital A no valor decimal 65 650000001 e a no bit decimal 97 1100001. com as letras que seguem alfabeticamente. Isso gerou todo tipo de idéias, como todas as chaves nos pares de valores-chave, devem ser numéricas para evitar que Chinelos sejam diferentes dos chinelos. O banco de dados Pick Multi-Value percebeu isso desde o início e não diferencia maiúsculas de minúsculas.


2
"Bobo" é a sua opinião. Há muito pouco fato nessa resposta que eu possa ver. Ah, e por que se restringir ao ASCII. Também havia EBCDIC.
roaima
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.