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 -FDie beiden obigen Befehle sind gleich.
Wenn eine Option einen Wert annimmt, überschreibt sie die Bündelung:In
gpg -aofoo.gpg,-aund-osind Optionen undfoo.gpgist der Wert, der-ogegeben wird . -
Die meisten taten es jedenfalls.
tar cvzfist ein alltäglicher Anblick. Aktuelle Versionen akzeptierentar -cvzfauch, 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/backupstar xfvzO file.tgz /etc/passwd /var/backupsBSD
psverwendet immer-; SysVpstut 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 -u8Dies setzt die Optionen
classundu8, und unset dievbOption.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.gpgDies setzt
-s,-e, und--no-armor(das ist das Gegenteil von--armor).Normalerweise
--output=signed.gpgund--output signed.gpgsind 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/cim VMS-Stil , wieder andere bevorzugen/abcim Unix-Stil . - Die meisten verwenden
/als Präfix akzeptieren manche auch-, andere akzeptieren nur-. - Werte können als
/foo barangegeben 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
getoptverwenden .
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.