Frage Was ist der Unterschied zwischen den einzelnen Strich- und Doppelstrich-Flags bei Shell-Befehlen?


Ich bin neu in der Shell arbeiten und die Verwendung dieser Befehle scheint willkürlich. Gibt es einen Grund, warum eine Flagge einen Strich hat und eine andere einen doppelten Strich hat?


54
2018-05-10 14:27


Ursprung


Es soll vom POSIX-Standard gesteuert werden: iam.ubc.ca/guides/javatut99/essential/attributes/_posix.html - cjc
Dieser Link ist jetzt 404 @cjc :( Eine möglicherweise zuverlässigere Verbindung könnte sein en.wikipedia.org/wiki/POSIX - Bernhard Hofmann


Antworten:


Auf einen einzelnen Bindestrich können mehrere Einzelzeichenflags folgen. Ein doppelter Bindestrich kennzeichnet eine einzelne Option mit mehreren Zeichen.

Betrachten Sie dieses Beispiel:

tar -czf

In diesem Beispiel -czf spezifiziert drei Einzelzeichen-Flags: c, z, und f.

Betrachten Sie nun ein anderes Beispiel:

tar --exclude

In diesem Fall, --exclude Gibt eine einzelne Mehrfachzeichenoption an, die benannt wird exclude. Der doppelte Bindestrich unterscheidet das Befehlszeilenargument und stellt dies sicher tar interpretiert es als exclude eher als eine Kombination von e, x, c, l, u, d, und e.


91
2018-05-10 14:32



@kylex, nein, da es keine lange Option namens "c" gibt und das - eine lange Option bedeutet, folgt keine einzige Zeichenoption. - psusi
Manchmal können sogar lange Befehle einfach gestrichelt sein. Zum Beispiel verwendet 'cdrecord' alle einfach-gestrichelten Befehle (-eject -dao ...). Es hängt alles vom Programm ab, aber die meisten (!) Von ihnen verwenden - für einzelne und - für mehrere Zeichen (lange) Befehle - mulaz
@mulaz, ja, cdrecord macht ziemlich viele doof Sachen. - psusi
bedenken Sie auch - allein verwendet bedeutet in der Regel das Ende der Optionen. Sehen Sie hier für weitere Informationen: unix.stackexchange.com/questions/11376/ ... - Sirex
@killjoy, denn ob aus Unwissenheit oder Wahl, die Autoren dieser Programme haben die Konvention natürlich nicht eingehalten. So wie cdrecord vor Jahren in den obigen Kommentaren erwähnt. - psusi


Alles hängt vom Programm ab. Normalerweise wird "-" für "kurze" Optionen (ein Buchstabe, -h) verwendet, und "-" wird für "lange" (er) Optionen verwendet (--help).

Kurze Optionen können normalerweise kombiniert werden (also "-h -a" ist gleich wie "-ha")

In Unix-ähnlichen Systemen wird der ASCII-Bindestrich häufig verwendet, um Optionen anzugeben. Auf den Charakter folgen normalerweise ein oder mehrere Buchstaben. Ein Argument, bei dem es sich um einen einzelnen Bindestrich ohne Buchstaben handelt, gibt normalerweise an, dass ein Programm Daten verarbeiten soll, die von der Standardeingabe kommen, oder Daten an die Standardausgabe senden. Bei einigen Programmen werden zwei Bindestrich-Minuszeichen (-) verwendet, um "lange Optionen" anzugeben, bei denen beschreibende Optionsnamen verwendet werden. Dies ist ein gemeinsames Merkmal der GNU-Software.

Quelle


14
2018-05-10 14:35



Warum also ist es Java-Version und Ant-Version? - killjoy


Es ist wirklich eine Konvention. Es kann jedoch Parsern dabei helfen, die an das Programm übergebenen Optionen effizienter zu kennen. Außerdem gibt es nette Dienstprogramme, die beim Parsen dieser Befehle helfen können, wie z getopt(3) oder der Nicht-Standard getopt_long(3) um die Argumente eines Programms zu analysieren.

Es ist schön, denn wir können mehrere kurze Optionen kombiniert haben, wie andere Antworten sagen, wie tar -xzf myfile.tar.gz.

Wenn es ein "Lisa" Argument für ls, es hätte wahrscheinlich eine andere Bedeutung als Typ ls -lisa als ls --lisa. Die ehemaligen sind die l, i, s, und a Parameter, nicht das Wort.

Tatsächlich könnte man schreiben ls -l -i -s -a, genau so wie ls -lisa, aber das hängt vom Programm ab.

Es gibt auch Programme, die dieser Konvention nicht folgen. Vor allem für meine Sicht, dd und gcc.


6
2018-05-10 18:56





kurze Optionen mit einfachem Strich und lange Optionen mit doppeltem Strich

kurze Optionen können zu einem einzigen Argument kombiniert werden;

for example: ls -lrt #instead of ls -l -r -t

Wenn wir lange Optionen mit einem einzigen Bindestrich zulassen, führt dies zu Mehrdeutigkeiten. Um dies zu beheben, verwenden wir einen Doppelstrich für lange Optionen.


2
2017-08-29 03:48