Woher kommt die Konvention, einfache Bindestriche für Buchstaben und doppelte Bindestriche für Wörter zu verwenden, und warum wird sie weiterhin verwendet?
Wenn ich zum Beispiel eingebe ls --help
, siehst du:
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author with -l, print the author of each file
-b, --escape print octal escapes for nongraphic characters
--block-size=SIZE use SIZE-byte blocks
-B, --ignore-backups do not list implied entries ending with ~
...
Ich habe versucht, - and -- convention
auch mit Zitaten mit wenig Erfolg zu googeln .
command-line
history
options
Larry
quelle
quelle
-
wird technisch als Bindestrich bezeichnet . Wir verwenden das Wort "Bindestrich", um in den meisten Fällen auf den Bindestrich (-) und manchmal auf den Bindestrich (-) zu verweisen, aber keiner von beiden ist ein Bindestrich (-).java -version
find . -delete
-ab
die sowohla
als auch aktivierenb
. Ohne den Doppelstrich,-help
würden die aktivierenh
,e
,l
, undp
Optionen.Antworten:
In The Art of Unix Programming beschreibt Eric Steven Raymond, wie sich diese Praxis entwickelte:
[1] http://www.faqs.org/docs/artu/ch10s05.html
quelle
Ein Grund für die Fortsetzung der einzelnen Buchstaben Optionen zu verwenden, weil sie aneinandergereiht werden können:
ls -ltr
ein viel einfacher , als zu gebenls --sort=time --reverse --format=long
. Es gibt eine Reihe von Situationen, in denen beide gut zu gebrauchen sind. Versuchen Sie bei der Suche nach diesem Thema die Konvention "Unix-Befehlszeilenoptionen".quelle
ls --sort=time --reverse --format=long
, ist es auch keine gute Idee, diese nicht standardmäßige Methode zu erwähnen.Das Zitat von Raymond von @jasonwryan enthält einige nützliche Informationen, beginnt jedoch in der Mitte der Geschichte:
'-'
Optionszeichen wurde in Multics verwendet. Bitsavers hat ein Handbuch für seine Benutzerbefehle .'/'
für Tastatureingaben sind (z. B. für TOPS und VMS) und andere weniger (z. B.'('
für VM / SP CMS).-print
vs-pr
(Seite 3-8).getopt
eingeführt. Da es nicht Teil des ursprünglichen Unix war, gibt es Dienstprogramme, die nicht verwendet wurdengetopt
und unverändert belassen wurden. Aber dabeigetopt
geholfen, Programme konsistent zu machen.Auf der anderen Seite waren Unix-Optionen mit einem
getopt
Zeichen. Andere Systeme, insbesondere alle größeren, verwendeten Schlüsselwörter. Einige (nicht alle) erlaubten die Abkürzung dieser Schlüsselwörter , dh nicht alle Zeichen, solange die Option eindeutig war. Bei diesem Test gibt es Fallstricke hinsichtlich der Mehrdeutigkeit. Zum Beispiel:sta
und überlegte, ob ich sie bekommen solltestatus
. Das war die Abkürzung fürstart
und nachdem der Befehlsinterpreter nichts zum Starten gegeben hatte , meldete er mich ab.-v
(für die Version) den Vorzug zu geben-vb
(visuelle Glocke). Das X-Toolkit bietet keine direkte Möglichkeit, eine bevorzugte Option anzugeben, wenn Unklarheiten bestehen.Aufgrund dieses Zweideutigkeitspotenzials ziehen es einige Entwickler vor, Abkürzungen nicht zuzulassen. Lynx verwendet beispielsweise Optionen mit mehreren Zeichen, ohne Abkürzungen zuzulassen.
Nicht alle Programme verwendet
getopt
:tar
undps
nicht. Auch nichtrcs
(odersccs
), wie Sie sehen können, wenn Sie notieren, wo der Bindestrich optional und die Optionswerte optional waren.In Anbetracht dessen haben die GNU-Entwickler die in anderen Systemen verwendeten Schlüsselwortoptionen angepasst, indem sie erweitert haben
getopt
, um eine lange Version jeder kurzen Option bereitzustellen. Zum Beispiel sagt textutils 1.0 changelogDie Änderung in fileutils war früher:
und vielleicht findet jemand einen noch früher, aber es scheint, dass der Datei-Header das früheste Datum anzeigt:
Das ist (zum Beispiel) gleichzeitig mit dem X Toolkit (1987). Die meisten Unix-Dienstprogramme, mit denen Sie vertraut sind (z. B.
ls
,ps
), verwendeten die vorhandenen Optionen für einzelne Zeichen, die regelmäßige Besuche im Handbuch erfordern. Bei der Einführunggetopt_long
haben die GNU-Entwickler dies nicht getan, indem sie zuerst neue Optionen hinzugefügt haben. sie begann durch die vorhandenen Optionen Tabelliermaschinen und eine passende lange Option bietet.Weil sie das Hinzufügen zu einem bestehenden Repertoire gab es (wieder) das Problem des Konflikts mit dem bestehenden Optionen. Um dies zu vermeiden, haben sie die Syntax mit zwei Bindestrichen vor langen Optionen geändert.
Diese Programme
getopt_long
werden aus den üblichen Gründen weiterhin auf diese Weise verwendet:quelle
In der Wikipedia- Befehlszeilenschnittstelle wird Folgendes gemeldet:
quelle
Ich vermute, dass aussagekräftigere Optionen gewünscht wurden und dass Sie sich bei längeren Optionen keine Gedanken mehr darüber machen müssen, ob Ihnen die einzelnen Zeichen ausgehen.
Sobald Sie sich für lange Optionen entschieden haben, haben Sie ein Problem, zumindest wenn Sie vorhaben, sowohl lange als auch kurze Optionen zu unterstützen. Ich bin mir nicht sicher, aber ich glaube, dass die Antwort von arcege den Schlüssel dazu enthält, warum - und -. Eine generische Verarbeitungsroutine, z. getopt_long () müsste wissen, ob ein einzelnes Befehlszeilenargument mehrere Optionen enthalten kann, z. -ltr. Daher müsste eine Verarbeitungsroutine in der Lage sein, zwischen den beiden zu unterscheiden. Wenn ich einen einzelnen Bindestrich (-) lese, kann der Rest des Befehlszeilenarguments mit mehreren Optionen übereinstimmen. Wenn ich einen doppelten Gedankenstrich (-) lese, muss der Rest des Befehlszeilenarguments mit einer einzelnen Option übereinstimmen.
Ich habe gerade getopt_long () benutzt und ich mag schon lange Optionen, da sie leichter zu merken sind und sich selbst dokumentieren. Wenn ich die folgenden zwei Befehle habe:
./aggregator -f 15
./aggregator - spülzeit 15
Ich würde sagen, dass die zweite Option, die die Long-Option verwendet, selbsterklärender ist.
quelle
Es gibt wahrscheinlich ein paar Gründe, warum die beiden Methoden verwendet werden. Eine davon ist natürlich die Tradition. Programmierer und Benutzer sind Menschen, und Menschen erwarten, dass die Dinge auf eine bestimmte Weise funktionieren. Wenn es keinen Grund gibt, etwas zu ändern (und für eine Befehlszeile gibt es nicht viel Grund, etwas zu ändern), dann nicht.
Davon abgesehen weiß ich, dass es Tools gibt, die den einzelnen Bindestrich für eine lange Option verwenden oder die Bindestriche sogar ganz entfernen. Diese Werkzeuge können anfangs schwierig sein und in einem ansonsten einheitlichen System eher als Warzen hervorstechen.
Wenn ich den Unterschied zwischen den beiden lernte (und bevor es zur zweiten Natur wurde), erinnerte ich mich immer daran, dass der "kurze" Bindestrich mit den "kurzen" Optionen übereinstimmt, während der "lange" (oder doppelte) Bindestrich mit dem "langen" übereinstimmt. Optionen. Ich weiß nicht, ob diese Argumentation bei der Entwicklung des doppelten Bindestrichs verwendet wurde, aber es ist möglich.
quelle