Am gebräuchlichsten ist GNU getopt
Stil, mit einem Bindestrich für kurze Optionen und zwei Bindestrichen für lange Optionen.
-
Anfänglich nahmen Unix-Programme Optionen mit einem einzelnen Buchstaben, denen ein einzelner Bindestrich vorangestellt war, und optional gebündelt:
ls -laF ls -l -a -F
Die beiden obigen Befehle sind gleich.
Wenn eine Option einen Wert annimmt, überschreibt sie die Bündelung:In
gpg -aofoo.gpg
,-a
und-o
sind Optionen undfoo.gpg
ist der Wert, der-o
gegeben wird . -
Die meisten taten es jedenfalls.
tar cvzf
ist ein alltäglicher Anblick. Aktuelle Versionen akzeptierentar -cvzf
auch, und je nachdem, ob Sie den Bindestrich hinzufügen, werden die Argumente sehr unterschiedlich interpretiert. Zum Beispiel bedeuten diese beiden dasselbe (beachten Sie, dass dashless-Optionen nicht sind unmittelbar vor ihrem Wert):tar -xf file.tgz -vzO /etc/passwd /var/backups
tar xfvzO file.tgz /etc/passwd /var/backups
BSD
ps
verwendet immer-
; SysVps
tut niemals. Die Linux-Version akzeptiert beide Versionen und ändert ihr Verhalten, je nachdem, ob einer Option ein Bindestrich vorangestellt wurde. (Im Gegensatz zum obigen tar-Beispiel ändert ps die Option Bedeutungen auch.) -
X11-Programme verwendeten lange Optionen, denen ein einzelner Bindestrich oder manchmal ein Pluszeichen vorangestellt war:
xterm -class FooTerm +vb -u8
Dies setzt die Optionen
class
undu8
, und unset dievb
Option.Der X11-Stil ist mit der Optionsbündelung nicht kompatibel.
-
Später wurden lange Optionen zu GNU
getopt()
hinzugefügt auf eine Weise, die mit Ein-Buchstaben-Optionen kompatibel ist.gpg -se --no-armor --output=signed.gpg
Dies setzt
-s
,-e
, und--no-armor
(das ist das Gegenteil von--armor
).Normalerweise
--output=signed.gpg
und--output signed.gpg
sind gleichwertig. (Aber nicht immer – z. B. akzeptiert curl nicht ersteres, sondern nur letzteres.)(Wenn ich mich richtig erinnere, verwendeten lange Optionen
+
als Präfix, bevor es in--
geändert wurde .) -
Die POSIX-Spezifikation hat einen Abschnitt Utility Argument Syntax, der die Ein-Zeichen-Optionen beschreibt.
Die meisten Windows-Programme verwenden ihre eigenen Parser, was die Benutzer in den Wahnsinn treibt.
- Einige erfordern
/a /b /c
, andere erlauben/a/b/c
im VMS-Stil , wieder andere bevorzugen/abc
im Unix-Stil . - Die meisten verwenden
/
als Präfix akzeptieren manche auch-
, andere akzeptieren nur-
. - Werte können als
/foo bar
angegeben werden ,/foo=bar
,/foo:bar
. - Normalerweise können Leerzeichen
/quoted "like this"
sein , aber einige Programme nehmen den"
als wörtliches Zeichen. (Dies ist ein Nachteil davon, das Programm seine eigene Wortaufteilung durchführen zu lassen; in Unix wird dies von der Shell gehandhabt.) - Plattformübergreifende Programme können eine Implementierung von
getopt
verwenden .
Im Allgemeinen ist ersteres in älteren Programmen zu finden, die zu fest verankert sind, um sie zu ändern. Diese Art von langen Optionen sind mit dem Standard getopt()
nicht kompatibel Funktion.
Der zweite Stil wurde von GNU getopt_long()
eingeführt , und entspricht bestehenden Standards, die erwarten, dass der erste Stil gebündelte kurze Optionen sind (also -orange
soll -o -r -a -n -g -e
bedeuten ). Diese Art der langen Option wird stark bevorzugt.