Wenn ich das tue - CD ..
anstatt cd ..
es gibt mir Fehler zu sagen -
CD: command not found
Warum unterscheidet das Terminal zwischen Groß- und Kleinschreibung, wenn es um Linux-Befehle geht? Ich meine, Sie sollten in der Lage sein, den Befehl entweder mit "nur Großbuchstaben" oder "nur Kleinbuchstaben" auszuführen.
Ich weiß, dass es einen Grund gibt, aber ich bin nur neugierig.
shell
user-interface
Hussain Tamboli
quelle
quelle
stty iuclc olcuc
wenn Sie ein Terminal haben möchten, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird ;-)Antworten:
Letztendlich war es eine willkürliche Entscheidung, die die Entwickler von Unix vor über vier Jahrzehnten getroffen haben. Sie hätten sich dafür entscheiden können, die Groß- und Kleinschreibung zu ignorieren, wie dies die Entwickler von MS-DOS ein Jahrzehnt später getan haben, aber das hat auch seine Nachteile.
Es ist zu tief in die * ix-Kultur eingebettet, als dass es sich jetzt ändern könnte. Das von eppesuig angesprochene Problem der Groß- und Kleinschreibung des Dateisystems ist nur ein Teil davon. MacOS-Systeme - die auf Unix basieren - haben normalerweise Dateisysteme, bei denen die Groß- / Kleinschreibung nicht berücksichtigt wird (aber die Groß- / Kleinschreibung beibehalten wird). In solchen Systemen werden Befehle, die sich außerhalb der Shell befinden, tatsächlich unabhängig von der Groß- / Kleinschreibung behandelt. Bei eingebauten Funktionen wird jedoch
cd
weiterhin die Groß- und Kleinschreibung berücksichtigt .Selbst mit einem Dateisystem, bei dem die Groß- und Kleinschreibung keine Rolle spielt, widerspricht die Geschichte Ihren Wünschen, Hussain. Wenn ich
ls
auf meinem Mac tippe, erhalte ich eine farbige Verzeichnisliste. Wenn ichLS
stattdessen/bin/ls
tippe , wird es weiterhin ausgeführt, aber die Auflistung wird nicht eingefärbt, da bei dem Alias, der das-C
Flag hinzufügt, die Groß- und Kleinschreibung beachtet wird.Am besten gewöhnen Sie sich einfach daran. Wenn du kannst, lerne es zu mögen.
quelle
Dies ist kein "Terminal" -Problem, sondern eine Dateisystemfunktion. Wie soll die Shell nach Ihren Befehlen im Dateisystem (immer Groß- und Kleinschreibung beachten) suchen?
quelle
bash
Option genanntcdspell
: es versucht , die richtigen Dateinamen zu finden , auch wenn Sie es falsch tiped, aber es ist nur für den Befehl Arbeits Argumente .cd
,CD
,cD
undCd
jedes mit einem einzigartigen Verhalten.hash -p /bin/hostname HOSTNAME
und jetztHOSTNAME
ist der Befehl für/bin/hostname
.set completion-ignore-case on
.Bei den technischen Systemen, die ich verwende und respektiere, wird fast ausschließlich zwischen Groß- und Kleinschreibung unterschieden: Sei es das Betriebssystem oder die Programmiersprache oder irgendetwas anderes.
Die Ausnahmen, an die ich im Moment denken könnte, sind die HTML-Tags und einige Implementierungen von SQL sowie die Programmiersprache Ada.
Selbst in diesen Fällen gibt es meiner Meinung nach starke Tendenzen, HTML-Tags in Kleinbuchstaben und die SQL-Abfragesemantik in Großbuchstaben (und in Großbuchstaben) zu schreiben. (Korrigieren Sie mich, wenn ich falsch liege.) Wie bei Ada korrigiert Sie der Emacs-Modus, wenn Sie beispielsweise einen Prozedurnamen in Kleinbuchstaben eingeben, obwohl dies beim Kompilieren keine Rolle spielt. Selbst wenn die Groß- und Kleinschreibung nicht berücksichtigt wird, scheinen die Leute zuzustimmen, dass dies eine schlechte Idee ist.
Der Grund dafür ist, dass Sie mit Groß- und Kleinschreibung viel mehr Ausdruckskraft erhalten. Nicht nur quantitativ -
CD
ist eine, sondernCD
,Cd
,cD
, undcd
vier sind - aber noch wichtiger ist , können Sie äußern Zweck, Betonung usw. mit Groß- und Klein vernünftig; Außerdem verbessern Sie beim Programmieren die Lesbarkeit.Intuitiv ist klar , dass Sie nicht lesen
hi
undHI
die gleiche Art und Weise!Um Ihnen ein Computerweltbeispiel zu geben: In der Programmiersprache Ada (aus den 1980er Jahren) könnte die erste Zeile eines Prozedurcodeblocks folgendermaßen aussehen:
Wie Sie sehen, werden die Prozedur- und Parameternamen in Großbuchstaben geschrieben, ebenso wie Datentypen. Alles andere ist in Kleinbuchstaben geschrieben. Beachten Sie auch, dass der Parametername "in Großbuchstaben" besagt, dass es sich um ein Akronym handelt. Vergleichen Sie dies nun mit
Dies ist möglich, da Ada die Groß- und Kleinschreibung nicht berücksichtigt (oder, um genau zu sein, der Compiler ändert es wie in meinem ersten Beispiel, ändert aber natürlich nicht Ihren Code). Oder wie wäre es mit:
Das ist ein bisschen lächerlich, ich weiß; aber jemand wäre dumm genug, es so zu schreiben (na ja, vielleicht auch nicht). Es ist wichtig, dass ein case sensitive System nicht nur die Konsistenz der Menschen erzwingt, sondern auch dazu beiträgt (Lesbarkeit) und sie zu ihrem Vorteil nutzt (das Akronym-Beispiel oben).
quelle
length
undLength
ist in der Regel eine schlechte Idee :)DEFine PROCedure Hello
Zum Beispiel. Sie hatte nur geben die aktivierten Bits, aber das volle Wort in Programmlisten erschienen. Dies galtREMark
auch und war nicht so nervig ...Es ist nicht mehr oder weniger seltsam als die Tatsache, dass wir zunächst ein Alphabet in Groß- und Kleinschreibung haben. Wenn Sie nachschauen
/usr/bin
, werden Sie feststellen, dass (sehr) wenige ausführbare Dateien die Groß- und Kleinschreibung ausnutzen.Ein Namespace, bei dem zwischen Groß- und Kleinschreibung unterschieden wird, ist nicht nur doppelt so groß wie ein unempfindlicher Namespace - der Unterschied wächst exponentiell mit der Wortlänge. ZB gibt es mit 26 Zeichen 26 ^ 3 (17576) verschiedene Möglichkeiten in drei Buchstaben; mit 52 (2 * 26) Zeichen gibt es 52 ^ 3 = 140608. Ein offener Namespace ist eine gute Sache;)
quelle
Das Konzept der "Groß- / Kleinschreibung" kann (und ist in der Tat) eine länderspezifische Sache sein, die, wie jede andere Designkomplikation, so nahe wie möglich an den Verwendungspunkt im Anwendungsstapel gebracht werden sollte, nicht Teil der Ader.
In einer Umgebung, in der zwischen Groß- und Kleinschreibung unterschieden wird, kann diese in eine Umgebung ohne Berücksichtigung der Groß- und Kleinschreibung eingebunden werden, jedoch nicht umgekehrt.
quelle
Es ist nicht das Terminal, es ist das Dateisystem. Oder bei
cd
(cd ist eine eingebaute Shell) der Shell ist die Groß- und Kleinschreibung zu beachten.Es hätte möglich sein können (zumindest mit ASCII), die Groß- und Kleinschreibung zu ignorieren. Dies ist schwieriger mit dem jetzt verwendeten Unicode (ob zwei Zeichen gleich sind, kann von local abhängen).
Was tun?
shopt -s nocaseglob
#das ist in meinem~/.bashrc
shopt -s nocasematch
Dies wäre auch in~/.bashrc
set completion-ignore-case on
#das ist in meinem~/.inputrc
quelle
Der Grund, warum diese Frage gestellt wurde, und der Grund, warum Sie viel darüber diskutieren werden, wenn Sie das Thema googeln, ist, dass es für "normale" Leute schwieriger ist, eine Programmiersprache oder Befehlszeile zu lernen und zu verwenden Schnittstelle.
Die Unterscheidung zwischen Groß- und Kleinschreibung hat ihren Ursprung in der geringen Leistung von Computern in der Vergangenheit. Um die Groß- und Kleinschreibung zu ignorieren, war eine zusätzliche Parsing-Operation erforderlich, bevor der Befehl dem Interpreter oder einem Compiler vor seiner Ausführung übergeben wurde. Frühere Entwickler waren nicht bereit, die Leistung des Computers für die Groß- und Kleinschreibung zu verschwenden.
Ich glaube, in den obigen Kommentaren gibt es eine Reihe von falschen Behauptungen. Erstens werden Psychologen Ihnen sagen, dass Menschen nicht automatisch zwischen einem Wort in Groß- oder Kleinbuchstaben oder sogar einer Kombination aus beiden in Bezug auf die Bedeutung des Wortes unterscheiden. Die Groß- und Kleinschreibung wird in normalen Ausdruckssprachen verwendet, um eine zusätzliche Bedeutung zu vermitteln. Die Verwendung eines Großbuchstabens, der ein Wort in einem Satz beginnt, zeigt beispielsweise an, dass es sich höchstwahrscheinlich um ein Eigenname handelt. Großbuchstaben werden auch verwendet, um die Prosa zu strukturieren. Beispielsweise wird ein Großbuchstabe verwendet, um den Anfang eines Satzes anzugeben. Aber "Wort" und "Wort" werden vom menschlichen Verstand als gleichbedeutend angesehen.
Die Macher von DOS, ADA und Pascal, um nur einige zu nennen, waren sich darüber im Klaren, dass die Berücksichtigung der Groß- und Kleinschreibung eine zusätzliche Belastung für den Anfänger darstellt. Später konnten Texteditoren in "Integrated Development Environments" (IDEs), die ein reserviertes Wort erkannten, dieses Wort so umformulieren, dass es ohnehin dem Stil entsprach. Zeigen Sie es außerdem in einer anderen Farbe an, um das Wort hervorzuheben. Das Argument, dass Groß- und Kleinschreibung für besser lesbaren Code sorgt, ist daher trügerisch. Es geht nicht um "normale" Leute. Es fügt einfach eine unnötige und manchmal verwirrende Ebene zu einer bereits anspruchsvollen Aufgabe hinzu.
Java ist ein extremes Beispiel für eine sehr schlechte Sprache im Hinblick auf die Benutzerfreundlichkeit für Anfänger. Es erzwingt die strikte Berücksichtigung der Groß- und Kleinschreibung, erlaubt dem Programmierer jedoch dummerweise, zwei Funktionen mit demselben Namen zu haben, die jedoch tatsächlich verschiedene Funktionen sind, da eine andere Argumente hat als die andere. Java ist in der Tat ein derartiger Sprachabbruch, dass sich die Erfolgsquote von rund 70% auf 40% verringerte, als die Universitäten von der Vermittlung von Pascal-Syntax zu Studenten wechselten, die nicht-Informatik-Kurse absolvierten.
Zusammenfassend ergab sich die Groß- / Kleinschreibung aus zwei Gründen. Einer war der Mangel an Computerleistung. Die zweite war, dass Menschen, die ihren Weg in die Informatik finden, oft im autistischen Spektrum liegen und sich nicht gut auf die Bedürfnisse "normaler" Menschen beziehen. Infolgedessen können diese Personen nicht einschätzen, dass die Berücksichtigung der Groß- und Kleinschreibung unnötig ist und das Erlernen und Verwenden einer Programmiersprache behindert.
quelle
Groß- und Kleinschreibung ist eine dumme Idee, die entstanden ist, weil Unix-Autoren nicht verstanden haben, dass ASCII so konzipiert ist, dass Groß- und Kleinschreibung nicht berücksichtigt wird. Man ignoriert einfach die führenden Bits. ASCII ist eine 7-Bit-Codierung mit dem Großbuchstaben A bei einem Dezimalwert von 65 1000001 und einem Dezimalwert von 97 1100001. Die Buchstaben folgen alphabetisch. Dies führte zu allen möglichen Ideen, z. B. sollten alle Schlüssel in Schlüsselwertpaaren numerisch sein, um zu vermeiden, dass sich Hausschuhe von Hausschuhen unterscheiden. Die Multi-Value-Datenbank von Pick hat dies von Anfang an erkannt und unterscheidet nicht zwischen Groß- und Kleinschreibung.
quelle