Ich habe mich gefragt, warum bei einigen Programmen die Eingabeaufforderungsparameter zwei Bindestriche voraussetzen, während bei einigen (den meisten) nur ein Bindestrich vorausgesetzt wird.
Zum Beispiel sehen die meisten Programme so aus: relaxer -dtd toc.xml toc_gr.xml toc_jp.xml
Während einige Programme so aussehen: xmllint --valid toc.xml --noout
Was ist der Grund, warum manche zwei Striche anstelle von einem benötigen? Ist es nicht sinnvoll, dass sich alle an einen Standard halten (dh ein einziger Strich reicht aus)?
linux
windows
command-line
unix
Pacerier
quelle
quelle
-i
vs.--input
oder-n
--dry-run
.-dtd
eigentlich hätte sein sollen--dtd
? Effektiv , was ich frage mich , ist es, was den Strich tut (und Doppel-Bindestrich) versucht zu bedeuten?--long-options
, akzeptieren auch eindeutige Abkürzungen. Also, für ein Programm mit Optionen--file-in
und--file-out
, könnten Sie--file-o=foo
oder verwenden--file-i=foo
, was Tipparbeit ersparen kann--very-long-optional-parameters
.convert
,mogrify
) hat „long“ Optionen mit nur einem Strich. Zum Beispiel:xterm -fn 6x10 -geometry 80x24+30+200
. Abkürzungen werden unterstützt, sofern sie sind verschieden ( zB ,-g
oder-geom
für-geometry
). Siehe X (7) für andere Beispiele.Antworten:
Genau das tun ,
ls --help
und auf den Optionen aussehen; es sollte dir klar sein.Es hat überhaupt nichts mit Parametern zu tun. Viele Optionen haben eine kurze und eine lange Form, und viele haben eine und keine andere.
Und in Bezug auf Parameter ist es einfach so, dass es in der langen Form, wenn sie einen Parameter nehmen, so aussieht, als ob es immer mit einem Gleichen ist. Offensichtlich können kurze Parameter genau so viel annehmen. nur benutzen sie keine Gleichen.
Hier ist ein Auszug aus
ls --help
(man ls
gibt gleichwertige Informationen). Beachten Sie, wie einige haben eine lange Form ohne Kurzform (--author
,--block-size
), einige haben eine Kurzform ohne eine lange Form (-c
,-f
,-g
), und einige haben sowohl eine Langform und eine Kurzform (-A
/--almost-all
,-b
/--escape
).quelle
ls --help
auf Windows?ls
unter Windows. Der entsprechende Befehl wäredir /?
. Sie verwenden plattformübergreifende Software, die die üblichen Windows-Konventionen verletzt, siehe meine Antwort.ls --help
Auszug finden Sie lange Optionen ohne kurze Optionen . Siehe--author
und--block-size
.ls
Befehl erhalten, ist die Verwendung von GIT . Die GIT-Bash-Shell oder das CMD-Fenster mit dem GIT-Bin im PATH habenls
.Es gibt keinen verbreiteten Standard. Es gibt eine gewisse Konsistenz zB in GNU-Programmen, aber Sie müssen die Dokumentation jedes Programms überprüfen.
Zitiert Wikipedia , Hervorhebung von mir:
In der Regel geben Bindestriche ein vordefiniertes Argument an. Ich denke, es wird verwendet, um sie von zB Dateinamen oder anderen Bezeichnungen zu unterscheiden, die Sie als Argumente verwenden könnten. Dies ist jedoch nicht immer der Fall (siehe unten).
Oft finden Sie das gleiche Argument sowohl als kurze als auch als lange Option, wie z . B. in ls .
Einige Programme verwenden einen einzelnen Bindestrich für Optionen mit einem Zeichen und zwei Bindestriche für Optionen mit mehreren Zeichen, aber nicht alle (GNU
find
kommt in den Sinn). Einige Programme haben optionale Bindestriche oder überspringen diese ganz (tar
oder BSDps
kommt in den Sinn).Manchmal
--foo
erfordern lange Optionen ( ) Argumente, kurze Optionen (-f
) hingegen nicht (oder implizieren zumindest ein bestimmtes Standardargument).Kurze Optionen (zB
cut -d ' '
) können Argumente haben, lange Optionen (zBls --all
) müssen sie nicht unbedingt haben.Um ein bestimmtes Verhalten eines Programms festzulegen, müssen Sie manchmal eine kurze Option verwenden, für andere müssen Sie eine lange Option verwenden, und für einige haben Sie die Wahl.
In einem ähnlichen Zusammenhang können einige Programme keine Leerzeichen zwischen einer Option und ihrem Argument verarbeiten , während andere dies nicht können.
Wie ich am Anfang schrieb, gibt es einfach kein gemeinsames Verhalten oder Standard. Häufig können Sie ein ähnliches Verhalten wie in derselben Bibliothek verfolgen, die für das Parsen von Argumenten verwendet wird, aber Sie möchten wahrscheinlich nicht die Quellen lesen, um dies herauszufinden.
Sie können die Argument-Syntax eines Programms nicht wirklich von der eines anderen ableiten.
Wenn Sie auch Windows in Betracht ziehen, wird es noch schlimmer: Während die Windows-Befehlszeilenaufrufe traditionell
/f
(zumindest die meiste Zeit) einzelne Zeichen für Optionen verwenden, mit:
als Trennzeichen zwischen Optionen und deren Wert (siehe z. B. hier ); plattformübergreifende Dienstprogramme sind weit verbreitet (wie die von Ihnen erwähnten) und bringen die häufigere Bindestrichsyntax für Argumente mit, mit all den oben genannten Inkonsistenzen.quelle
tar
,ps
,find
und solche hatten ihre Befehlszeilensyntax von POSIX eingestellt , bevor dieser Standard vollständig geliert war. Auf einem Gnu / Linux-System ist es einigermaßen sicher, dass mindestens--help
(fast) immer unterstützt wird, sowieman <command>
oderinfo <command>
find
das bei langen Optionen nicht der "GNU-Konvention" folgt (wahrscheinlich aus Gründen der POSIX-Konformität, wie @BRPocock hervorhob). Ich würde wieder +1 geben, wenn ich könnte, um DOS / Windows-Befehlszeilen- "Schalter" zu erwähnen, da die Frage des OP irgendwie mit "Windows" markiert wurde, und diese Konvention sollte der Vollständigkeit halber erwähnt werden.Dies ist eine Konvention von * nix. Doppelter Bindestrich steht vor Optionen, wenn sie vollständig geschrieben sind, während einfacher Bindestrich vor Optionen steht, wenn sie in Kurzform geschrieben sind . Beispielsweise
ls --all --l
kann auf gekürzt werdenls -al
. Wie zu sehen ist, haben nicht alle Optionen ihre Äquivalente mit einem Buchstaben, obwohl dies in der Regel häufiger der Fall ist.Unabhängig davon, wie Sie die Option eingeben, spielt es keine Rolle, ob die Option ein Argument annimmt oder nicht.
Wenn Sie sie für eine einmalige Verwendung schreiben, ist dies nicht wirklich wichtig, aber wenn Sie Befehle zum Beispiel in .alias-Dateien schreiben, ist es üblich, das vollständige Formular zu verwenden. Nur zur Erleichterung des Lesens für die nächste Person.
quelle
Dies sind herkömmliche UNIX-Syntaxen.
Ein Programmargument benötigt einen Bindestrich ("-"), gefolgt von einem einzelnen Buchstaben, wenn es sich um eine einfache Option handelt (z. B. -v ), und zwei Bindestriche ("-"), wenn die Option Argumente akzeptiert (z. B. --file toc.xml) oder --file = toc.xml )
Keine Auswirkung auf die Funktionalität des Programms.
quelle
--noout
(in der obigen Frage) eigentlich so geschrieben werden sollte, als hätte-noout
es keine Argumente ?single dash wird von getopt implementiert und ist eine posix-Standardfunktion, double dash in getopt_long und ist ein gnu-Standard.
Traditionell liefert ein einzelner Bindestrich eine einzelne Zeichenoption wie diese:
-A oder -V usw. müssen aber nicht darauf beschränkt sein. Beispiel: -Wall for gcc aktiviert alle Compiler-Warnungen für den Compiler-Befehl gcc.
Argumente mit doppelten Strichen sind in der Regel ausführlicher und verwenden häufig einen angegebenen Parameter wie --max-count = NUM. --Version ist jedoch nicht gleich.
Im Allgemeinen gibt es keine Regeln oder definierten Standards für die Angabe von Programmargumenten, sondern nur eine Reihe von Traditionen. Wenn jedoch die Befehlszeilen-Analysefunktionen getopt und getopt_long verwendet werden, sollten die Parameter im Allgemeinen dem Standard folgen, da die Bibliotheksfunktionen eine bestimmte Methode erzwingen.
quelle