Por que o terminal é sensível a maiúsculas e minúsculas?

12

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

CD: command not found

Por que o terminal é sensível a maiúsculas e minúsculas quando se trata de comandos do linux? Quer dizer, você deve ser capaz de executar o comando com caracteres "todos em maiúsculas" ou "todos em minúsculas".

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

    
por Hussain Tamboli 04.01.2013 / 12:28

8 respostas

42
Em última análise, foi uma escolha arbitrária feita pelos criadores do Unix há mais de quatro décadas. Eles poderiam ter escolhido tornar as coisas insensíveis a maiúsculas e minúsculas como os criadores do MS-DOS fizeram uma década depois, mas isso também tem suas desvantagens.

É muito profundamente incorporado na cultura * ix para mudar agora. O problema do sistema de arquivos sensível a maiúsculas trazido pelo eppesuig é apenas parte dele. Os sistemas macOS - que são baseados em Unix - normalmente possuem sistemas de arquivos que não diferenciam maiúsculas de minúsculas (mas que preservam maiúsculas e minúsculas), portanto em tais sistemas, os comandos externos ao shell são, na verdade, tratados sem distinção entre maiúsculas e minúsculas. Mas, builtins como cd permanecem sensíveis a maiúsculas e minúsculas.

Mesmo com um sistema de arquivos insensível a maiúsculas e minúsculas, a história das coisas conspira contra seus desejos, Hussain. Se eu digitar ls no meu Mac, recebo uma listagem de diretórios colorida. Se eu digitar LS , /bin/ls ainda será executado, mas a listagem não será colorida porque o alias que adiciona o -C é sensível a maiúsculas e minúsculas.

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

    
por 04.01.2013 / 12:48
8

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

    
por 04.01.2013 / 12:32
6

Os sistemas técnicos que eu uso e respeito são quase exclusivamente sensíveis a maiúsculas e minúsculas: seja SO ou linguagem de programação ou qualquer outra coisa.

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

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

O motivo é que você obtém um poder muito mais expressivo com a diferenciação de maiúsculas e minúsculas. Não apenas quantitativamente - CD é um, mas CD , Cd , cD e cd são quatro - mas mais importante, você pode expressar propósito, ê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 lê hi e HI da mesma maneira!

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

procedure body P(SCB : in out Semaphore_Control_Block) is

como você vê, os nomes de procedimento e parâmetro são capitalizados, assim como os tipos de dados, todo 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, já que a Ada não faz distinção entre maiúsculas e minúsculas (ou, para ser exato, o compilador irá alterá-lo para o modo em meu primeiro exemplo, mas obviamente não alterará 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). O ponto é, um sistema que diferencia maiúsculas de minúsculas não apenas forçará as pessoas a serem consistentes, elas também serão ajudadas por ela (legibilidade) e a usarão para sua vantagem (o exemplo da acrônima acima).

    
por 04.01.2013 / 14:38
4

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

Um namespace sensível a maiúsculas e minúsculas não é apenas duas vezes maior do que um insensível - a diferença aumenta exponencialmente com o tamanho da palavra. Por exemplo, usando 26 caracteres, existem 26 ^ 3 (17576) diferentes possibilidades em três letras; usando 52 (2 * 26) caracteres, há 52 ^ 3 = 140608. Um namespace aberto é uma coisa boa;)

    
por 04.01.2013 / 14:16
2

O conceito de caso "superior / inferior" pode ser (e é de fato) uma coisa específica do local, 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 parte do núcleo.

Ter um ambiente sensível a maiúsculas e minúsculas permite envolvê-lo em um ambiente sem distinção entre maiúsculas e minúsculas, mas não de maneira diferente.

    
por 04.01.2013 / 14:33
1

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

Poderia ter sido possível (pelo menos com ASCII), fazer é insensível a maiúsculas e minúsculas. Isso é mais difícil com o unicode agora usado (se dois caracteres são os mesmos, dependendo do local).

O que fazer sobre isso

  • Viva com isso.
  • Experimente estas opções de shell. Eles dão um compromisso e facilitam as coisas, sem apresentar todos os problemas de insensibilidade a maiúsculas e minúsculas.
    • shopt -s nocaseglob #está no meu ~/.bashrc
    • shopt -s nocasematch #this também estaria em ~/.bashrc
    • set completion-ignore-case on #está no meu ~/.inputrc
por 18.04.2018 / 11:45
-2

Como ponto de partida, a razão pela qual esta pergunta foi feita e a razão pela qual você encontrará muita discussão sobre isso, é que a sensibilidade a maiúsculas torna mais difícil para pessoas "normais" aprender e usar uma linguagem de programação. ou interface de linha de comando.

A sensibilidade a maiúsculas e minúsculas tem origem no baixo poder dos computadores no passado. Para tornar as coisas insensíveis às maiúsculas e minúsculas, era necessária uma operação de análise adicional antes que o comando fosse alimentado ao interpretador ou a um compilador antes de sua execução e os primeiros projetistas não estivessem preparados para desperdiçar a energia do computador.

Acredito que há várias afirmações incorretas nos comentários acima. Em primeiro lugar, os psicólogos dirão a você que os seres humanos não discriminam automaticamente entre uma palavra escrita em letras maiúsculas ou minúsculas ou mesmo uma combinação dos dois em termos do significado da palavra. O caso é 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 ela é provavelmente um nome próprio. Letras maiúsculas também são usadas para dar estrutura de 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, apreciaram que a sensibilidade a maiúsculas e minúsculas era um fardo adicional para o iniciante. Mais tarde, editores de texto em "Integrated Development Environments" (IDEs), reconhecendo uma palavra de reserva, poderiam reformular essa palavra de modo que ela fosse consistente com o estilo; além de exibi-lo em uma cor diferente para destacar a palavra. Portanto, o argumento de que a diferenciação de maiúsculas e minúsculas torna o 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 pobre do ponto de vista da facilidade de uso por um iniciante. Ele impõe a estrita sensibilidade a 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 do fato de uma ter um conjunto diferente de argumentos para a outra. De fato, Java é um aborto de tal forma que, quando as universidades deixam de ensinar a sintaxe Pascal para os alunos, realizando cursos não relacionados à informática, a taxa de aprovação caiu de 70% para 40%.

Assim, em resumo, a diferenciação de casos ocorreu por dois motivos. Um era a falta de poder do computador. A segunda é que as pessoas que entram na ciência da computação estão frequentemente no espectro autista e não se relacionam bem com as necessidades das pessoas "normais". Como conseqüência, essas pessoas não podem perceber que a diferenciação entre maiúsculas e minúsculas é desnecessária e um impedimento para aprender e usar uma linguagem de programação.

    
por 18.02.2017 / 21:05
-3
A sensibilidade a maiúsculas e minúsculas é uma idéia tola que surgiu porque os escritores do Unix não entenderam que o ASCII é projetado para ser prontamente insensível a maiúsculas e minúsculas. Um simplesmente ignora os bits principais. Ascii é uma codificação de 7 bits com maiúscula A no valor de bit decimal 65 1000001 e um decimal de bit 97 1100001. com as letras seguindo alfabeticamente. Isso gerou todos os tipos de ideias, como todas as chaves em pares de valores-chave, que devem ser numéricas para evitar que os chinelos sejam diferentes para os chinelos. O banco de dados Multi-Value escolhido percebeu isso desde o início e não faz distinção entre maiúsculas e minúsculas.

    
por 23.05.2018 / 00:35