Pourquoi le terminal est-il sensible à la casse?

12

Quand je le fais - CD ..au lieu de cd ..
cela, cela me donne une erreur de dire -

CD: command not found

Pourquoi le terminal est- il sensible aux commandes Linux? Je veux dire que vous devriez pouvoir exécuter la commande avec des caractères "tout en majuscules" ou "tous en minuscules".

Je sais que cela est dû à une raison quelconque, mais je suis simplement curieux.

Hussain Tamboli
la source
9
J'ai presque l'impression que cette question devrait être renommée Pourquoi les choses sont-elles sensibles à la casse?
kojiro
15
"Je veux dire que vous devriez pouvoir exécuter la commande avec" tous les majuscules "ou" tous les minuscules "." Vraiment? Pourquoi?
dmckee --- chaton ex-modérateur
5
Emettez un stty iuclc olcucsi vous avez envie d'avoir un terminal insensible à la casse ;-)
Stéphane Chazelas
1
CapsLock + c + d + CapsLock est pire que c + d
UniversallyUniqueID

Réponses:

43

En fin de compte, c'était un choix arbitraire fait par les créateurs d'Unix il y a plus de quatre décennies maintenant. Ils auraient pu choisir de rendre les choses insensibles à la casse comme les créateurs de MS-DOS l'ont fait une décennie plus tard, mais cela a aussi ses inconvénients.

Il est trop profondément ancré dans la culture * ix pour changer maintenant. Le problème du système de fichiers sensible à la casse soulevé par eppesuig n'en est qu'une partie. Les systèmes macOS - qui sont basés sur Unix - ont généralement des systèmes de fichiers qui ne respectent pas la casse (mais en préservant la casse), de sorte que ces commandes de systèmes externes au shell sont en fait traitées sans respect de la casse. Mais, les builtins commecd restent sensibles à la casse.

Même avec un système de fichiers insensible à la casse, l'histoire des choses conspire contre votre gré, Hussain. Si je tape lssur mon Mac, j'obtiens une liste de répertoires colorisés. Si je tape à la LSplace, /bin/lss'exécute toujours, mais la liste n'est pas colorisée car l'alias qui ajoute l' -Cindicateur est sensible à la casse.

Mieux vaut juste s'y habituer. Si vous le pouvez, apprenez à l'aimer.

Warren Young
la source
1
En fait, les noms de fichiers Windows peuvent être sensibles à la casse. Ils sont par exemple dans le sous-système POSIX et voir msdn.microsoft.com/en-us/library/ee681827%28v=vs.85%29.aspx
fpmurphy
3
C'est en fait surprenant car certains terminaux courants disponibles à l'époque étaient uniquement en majuscules et ils devaient implémenter une solution de contournement (mettez une barre oblique inverse avant une lettre si vous voulez qu'elle soit vraiment en majuscules - activée si vous avez tapé votre nom d'utilisateur en majuscules lorsque vous vous êtes connecté) dans) dans le pilote de discipline de ligne.
Random832
8

Ce n'est pas un problème "terminal", c'est une fonctionnalité de système de fichiers. Comment le shell doit-il rechercher vos commandes sur le système de fichiers (toujours sensible à la casse)?

eppesuig
la source
Et si deux commandes ou plus correspondent?
scai
1
La seule option qui peut vous aider un peu est une bashoption appelée cdspell: elle essaie de trouver le nom de fichier correct même si vous l'avez mal indiqué, mais elle ne fonctionne que pour les arguments de commande .
eppesuig
1
@HussainTamboli Il pourrait être nommé commandes cd, CD, cDet Cdchacun avec un comportement unique.
scai
6
Ce n'est pas vraiment une fonctionnalité de système de fichiers ou une fonctionnalité de terminal - c'est une fonctionnalité shell. Les commandes internes de shell seront sensibles à la casse sur un système de fichiers insensible à la casse. De plus, la plupart des commandes de hachage de shells, donc les commandes ne sont jamais vraiment des fichiers, elles sont en fait tirées d'un hachage. Essayez hash -p /bin/hostname HOSTNAMEet c'est maintenant HOSTNAMEla commande pour /bin/hostname.
kojiro
2
Oh, je dois également mentionner que vous pouvez dire à la plupart des shells d'être moins sensibles à la casse. Pour bash, vous pouvez lier set completion-ignore-case on.
kojiro
6

Les systèmes techniques que j'utilise et respecte sont presque exclusivement sensibles à la casse: que ce soit l'OS ou le langage de programmation ou autre chose.

Les exceptions auxquelles je pourrais penser en ce moment sont les balises HTML et certaines implémentations de SQL, et le langage de programmation Ada.

Même dans ces cas, je pense qu'il y a de fortes tendances à écrire des balises HTML en minuscules et la sémantique des requêtes SQL en majuscules (et les paramètres en majuscules). (Corrigez-moi si je me trompe.) Comme pour Ada, le mode Emacs vous corrigera si vous tapez par exemple un nom de procédure en minuscule, bien que cela n'ait pas d'importance lors de la compilation. Donc, même lorsqu'il y a insensibilité à la casse, il semble que les gens conviennent que c'est une mauvaise idée.

La raison en est que vous obtenez une puissance beaucoup plus expressive avec la casse. Non seulement quantitativement - CDest l' un, mais CD, Cd, cDet cdsont quatre - mais plus important encore , vous pouvez l'objet explicite, l' accent, etc. , en utilisant majuscules et minuscules sensiblement; De plus, lors de la programmation, vous améliorerez la lisibilité.

Intuitivement, il est clair que vous ne lisez pas hiet de HIla même manière!

Mais, pour vous donner un exemple du monde informatique, dans le langage de programmation Ada (des années 1980), la première ligne d'un bloc de code de procédure pourrait ressembler à ceci:

procedure body P(SCB : in out Semaphore_Control_Block) is

comme vous le voyez, les noms de procédure et de paramètre sont en majuscules, tout comme les types de données, tout le reste est en minuscules. Notez également que le nom du paramètre «tout en majuscules» nous indique qu'il s'agit d'un acronyme. Maintenant, comparez cela à

procedure body p(scb : in out semaphore_control_block) is

C'est possible, car Ada est insensible à la casse (ou, pour être exact, le compilateur le changera de la manière dans mon premier exemple, mais bien sûr ne changera pas votre code). Ou que diriez-vous:

PROCedure body P(Scb : IN Out semaphore_CONTROL_BLOCK) iS

Celui-là est un peu ridicule, je sais; mais quelqu'un serait assez stupide pour l'écrire de cette façon (enfin, peut-être pas). Le fait est qu'un système sensible à la casse forcera non seulement les gens à être cohérents, ils seront également aidés par lui (lisibilité) et l'utiliseront à leur avantage (l'exemple d'acronyme ci-dessus).

Emanuel Berg
la source
2
Pascal et Delphi sont également insensibles à la casse. En outre, avoir par exemple deux variables lengthet Lengthest généralement une mauvaise idée :)
Ajasja
@Ajasja: C'est intéressant, car Ada ressemble beaucoup à Pascal. Eh bien, je suppose que si vous les comptiez tous, il y aurait des tonnes de ces langages, car il y a tellement de langages de programmation. En ce qui concerne la longueur, bien sûr - mais vous pourriez peut-être penser à un tel cas: qu'en est-il de Max (une personne) et max (une fonction qui prend une liste de réels et renvoie le plus grand)?
Emanuel Berg
En ce qui concerne votre dernier exemple, vous pourriez être intéressé de savoir que l'interpréteur SuperBasic de QL a mis en majuscule les mots-clés exactement de cette manière:, DEFine PROCedure Hellopar exemple. Vous n'aviez qu'à taper les bits en majuscule, mais le mot complet apparaissait dans les listes de programmes. Cela s'appliquait REMarkaussi, et n'était pas si ennuyeux ...
David Given
4

Ce n'est pas plus ou moins étrange que le fait que nous ayons un alphabet majuscule et minuscule pour commencer. Si vous regardez /usr/bin, vous remarquerez que (très) peu d'exécutables exploitent la capitalisation.

Un espace de noms sensible à la casse n'est pas seulement deux fois plus grand qu'un espace insensible - la différence augmente de façon exponentielle avec la longueur des mots. Par exemple, en utilisant 26 caractères, il existe 26 ^ 3 (17576) possibilités différentes en trois lettres; en utilisant 52 (2 * 26) caractères, il y a 52 ^ 3 = 140608. Un espace de noms ouvert est une bonne chose;)

boucle d'or
la source
D'où avez-vous obtenu les 3?
ctrl-alt-delor
@ ctrl-alt-delor Ce n'est qu'un exemple: "il y a 26 ^ 3 (17576) possibilités différentes en trois lettres ".
goldilocks
2

Le concept de majuscules / minuscules peut être (et est en effet) une chose spécifique aux paramètres régionaux, qui, comme toute autre complication de conception, doit être poussée le plus près possible du point d'utilisation dans la pile d'applications, ne pas faire partie de la coeur.

Avoir un environnement sensible à la casse permet de l'envelopper dans un environnement insensible à la casse, mais pas l'inverse.

bobah
la source
1

Ce n'est pas le terminal, c'est le système de fichiers. Ou dans le cas cd(cd est un shell intégré), le shell est sensible à la casse.

Il aurait pu être possible (au moins avec ASCII), de faire est insensible à la casse. C'est plus difficile avec l'unicode maintenant utilisé (si deux caractères sont identiques, cela peut dépendre du local).

Que faire à ce sujet

  • Vivre avec.
  • Essayez ces options de shell. Ils offrent un compromis et facilitent les choses sans introduire tous les problèmes d'insensibilité à la casse.
    • shopt -s nocaseglob #c'est dans mon ~/.bashrc
    • shopt -s nocasematch #ce serait également ~/.bashrc
    • set completion-ignore-case on #c'est dans mon ~/.inputrc
ctrl-alt-delor
la source
-2

Comme point de départ, la raison pour laquelle cette question a été posée, et la raison pour laquelle vous y trouverez de nombreuses discussions si vous effectuez une recherche sur Google, est que la sensibilité à la casse rend plus difficile pour les personnes "normales" d'apprendre et d'utiliser un langage de programmation ou une ligne de commande. interface.

La sensibilité à la casse trouve son origine dans la faible puissance des ordinateurs dans le passé. Pour rendre les choses insensibles à la casse, il fallait une opération d'analyse supplémentaire avant que la commande ne soit envoyée à l'interpréteur ou à un compilateur avant son exécution et les premiers concepteurs n'étaient pas prêts à gaspiller l'énergie de l'ordinateur pour la commodité de la casse.

Je pense qu'il y a un certain nombre d'affirmations incorrectes dans les commentaires ci-dessus. Premièrement, les psychologues vous diront que les humains ne font pas automatiquement de distinction entre un mot écrit en lettres majuscules ou minuscules ou même une combinaison des deux en termes de signification du mot. La casse est utilisée dans les langages expressifs normaux pour transmettre une signification supplémentaire. Par exemple, l'utilisation d'une majuscule commençant un mot dans une phrase indique qu'il s'agit très probablement d'un nom propre. Les lettres majuscules sont également utilisées pour donner une structure en prose. Par exemple, une lettre majuscule est utilisée pour indiquer le début d'une phrase. Mais «mot» et «mot» sont considérés par l'esprit humain comme signifiant la même chose.

Les créateurs de DOS et d'ADA et de Pascal, pour n'en nommer que quelques-uns, ont apprécié que la sensibilité à la casse soit un fardeau supplémentaire pour le débutant. Plus tard, les éditeurs de texte des "environnements de développement intégrés" (IDE), reconnaissant un mot de réserve, pourraient refondre ce mot de manière à ce qu'il soit cohérent avec le style de toute façon; et affichez-le dans une couleur différente pour faire ressortir le mot. L'argument selon lequel la sensibilité à la casse rend le code plus lisible est donc fallacieux. Ce n'est pas pour les gens "normaux". Il ajoute simplement une couche inutile et parfois déroutante à une tâche déjà exigeante.

Java est un exemple extrême d'un langage très pauvre du point de vue de la facilité d'utilisation par un débutant. Il applique une sensibilité à la casse stricte mais, stupidement, permettra au programmeur d'avoir deux fonctions, toutes les deux portant le même nom, mais qui sont en fait des fonctions différentes en raison du fait que l'un a un ensemble d'arguments différent de l'autre. En effet, Java est un tel avortement d'un langage que lorsque les universités sont passées de l'enseignement de la syntaxe Pascal aux étudiants, entreprenant des cours non informatiques, le taux de réussite est passé d'environ 70% à 40%.

Donc, en résumé, la sensibilité à la casse est apparue pour deux raisons. L'un était le manque de puissance informatique. La seconde était que les personnes qui se frayent un chemin vers l'informatique sont souvent sur le spectre autistique et ne correspondent pas bien aux besoins des personnes "normales". En conséquence, ces personnes ne peuvent pas comprendre que la sensibilité à la casse est à la fois inutile et un obstacle à l'apprentissage et à l'utilisation d'un langage de programmation.

Kevin Loughrey
la source
1
Je supprimerais la section sur Java car elle est, à mon humble avis, basée sur l'opinion et en plus du point (la surcharge de méthode a peu à voir avec la casse) ... la surcharge de méthode / fonction se trouve également dans d'autres langages, tels que C ++ et pl / sql pour n'en nommer que deux. En ce qui concerne votre paragraphe sur la psychologie, je pense que les sources seraient bien ... Enfin, le dernier paragraphe est, à mon humble avis, également basé sur l'opinion et offensant et devrait être supprimé.
thecarpy
Pour vous permettre de mieux comprendre pourquoi C et tous les langages qui en sont issus ont endommagé la cause de l'informatique, rendez-vous sur; linkedin.com/pulse/… Le cœur de ce problème, ou devrais-je dire noyau :-), est que les programmeurs sont d'un type de personnalité qui ne se soucie pas de diffuser des connaissances mais de faire un travail. Si vous n'êtes pas d'accord avec ce qui a été dit dans ce post, veuillez présenter un argument pour étayer vos positions. Les opinions comptent peu.
Kevin Loughrey
Je suis d'accord que la sensibilité à la casse rend l'apprentissage plus difficile. Mais notez que presque tout dans Unix est en minuscules, alors continuez ainsi. Une exception majeure est que les variables d'environnement sont classiquement toutes les capitales.
ctrl-alt-delor
La casse doit être utilisée de manière cohérente et, comme indiqué dans cette réponse, pour transmettre des informations supplémentaires, par exemple variable d'environnement vs variable shell normale.
ctrl-alt-delor
-3

La sensibilité à la casse est une idée stupide qui est née parce que les rédacteurs Unix ne comprenaient pas que ASCII est conçu pour être facilement insensible à la casse. On ignore simplement les bits de tête. Ascii est un codage à 7 bits avec un A majuscule à la valeur décimale 65 1000001 et un décimal au bit 97 1100001. Les lettres suivent par ordre alphabétique. Cela a généré toutes sortes d'idées telles que toutes les clés dans les paires de valeurs clés doivent être numériques pour éviter que les pantoufles soient différentes des pantoufles. La base de données Pick Multi-Value l'a réalisé dès le début et n'est pas sensible à la casse.

ArgoPete
la source
2
"Silly" est votre avis. Il y a très peu de faits dans cette réponse que je peux voir. Oh, et pourquoi vous limiter à ASCII. Il y avait aussi EBCDIC.
roaima