Was ist der Unterschied zwischen den Flags für einfache und doppelte Striche bei Shell-Befehlen?
70
Ich bin neu in der Arbeit in der Shell und die Verwendung dieser Befehle scheint willkürlich. Gibt es einen Grund, warum eine Flagge einen einfachen Strich und eine andere einen doppelten Strich hat?
Einem einzelnen Bindestrich können mehrere Flags mit einem Zeichen folgen. Ein doppelter Bindestrich steht vor einer einzelnen Option mit mehreren Zeichen.
Betrachten Sie dieses Beispiel:
tar -czf
In diesem Beispiel -czfgibt drei Einzel-Zeichen Flags: c, z, und f.
Betrachten Sie nun ein anderes Beispiel:
tar --exclude
In diesem Fall wird --excludeeine einzelne Option mit mehreren Zeichen angegeben exclude. Der Doppel Bindestrich disambiguiert das Befehlszeilenargument, um sicherzustellen , dass tarinterpretiert sie als excludeanstatt eine Kombination von e, x, c, l, u, d, und e.
@kylex, nein, da es keine lange Option mit dem Namen "c" gibt und das - eine lange Option bedeutet, folgt keine Option mit einem einzelnen Zeichen.
Psusi
13
Manchmal können auch lange Befehle einfach gestrichelt werden. 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 (lange) Befehle mit mehreren Zeichen
mulaz
8
@mulaz, ja, cdrecord macht ziemlich viele alberne Sachen.
Psusi
10
Denken Sie auch daran - allein verwendet bedeutet in der Regel das Ende der Optionen. Weitere Informationen finden Sie hier: unix.stackexchange.com/questions/11376/…
Sirex
3
@killjoy, denn ob aus Unwissenheit oder Auswahl, die Autoren dieser Programme haben sich natürlich nicht an die Konvention gehalten. Genau wie vor cdrecordJahren in den obigen Kommentaren erwähnt.
Psusi
17
Das hängt alles vom Programm ab. Normalerweise wird "-" für "kurze" Optionen (ein Buchstabe, -h) und "-" für "lange" (er) Optionen (--help) verwendet.
Kurze Optionen können normalerweise kombiniert werden (so ist "-h -a" dasselbe wie "-ha")
In Unix-ähnlichen Systemen wird häufig der ASCII-Bindestrich verwendet, um Optionen anzugeben. Auf das Zeichen 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 stammen, oder Daten an die Standardausgabe senden soll. In einigen Programmen werden zwei Bindestriche (-) verwendet, um "lange Optionen" anzugeben, bei denen aussagekräftigere Optionsnamen verwendet werden. Dies ist ein allgemeines Merkmal von GNU-Software.
Es ist wirklich eine Konvention. Es kann Parsern jedoch helfen, effizienter über an das Programm übergebene Optionen Bescheid zu wissen. Außerdem gibt es nützliche Hilfsprogramme, die beim Parsen dieser Befehle helfen können, z. B. getopt(3)oder die nicht standardmäßigen getopt_long(3), um die Argumente eines Programms zu analysieren.
Es ist schön, denn wir können mehrere kurze Optionen kombinieren, wie andere Antworten sagen, wie tar -xzf myfile.tar.gz.
Wenn es ein "Lisa" -Argument für lsgäbe, hätte es wahrscheinlich eine andere Bedeutung zu tippen ls -lisaals ls --lisa. Die ersteren sind die l, i, sund aParameter, nicht das richtige Wort.
Tatsächlich könnte man schreiben ls -l -i -s -a, was genau dasselbe bedeutet wie ls -lisa, aber das würde vom Programm abhängen.
Es gibt auch Programme, die dieser Konvention nicht entsprechen. Vor allem für meinen Anblick ddund gcc.
kurze Optionen mit einem Strich im Vergleich zu langen Optionen mit einem doppelten 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 Bindestrich zulassen, führt dies zu Mehrdeutigkeiten. Um dies zu beheben, verwenden wir einen Doppelstrich für lange Optionen.
Antworten:
Einem einzelnen Bindestrich können mehrere Flags mit einem Zeichen folgen. Ein doppelter Bindestrich steht vor einer einzelnen Option mit mehreren Zeichen.
Betrachten Sie dieses Beispiel:
In diesem Beispiel
-czf
gibt drei Einzel-Zeichen Flags:c
,z
, undf
.Betrachten Sie nun ein anderes Beispiel:
In diesem Fall wird
--exclude
eine einzelne Option mit mehreren Zeichen angegebenexclude
. Der Doppel Bindestrich disambiguiert das Befehlszeilenargument, um sicherzustellen , dasstar
interpretiert sie alsexclude
anstatt eine Kombination vone
,x
,c
,l
,u
,d
, unde
.quelle
cdrecord
Jahren in den obigen Kommentaren erwähnt.Das hängt alles vom Programm ab. Normalerweise wird "-" für "kurze" Optionen (ein Buchstabe, -h) und "-" für "lange" (er) Optionen (--help) verwendet.
Kurze Optionen können normalerweise kombiniert werden (so ist "-h -a" dasselbe wie "-ha")
Quelle
quelle
Es ist wirklich eine Konvention. Es kann Parsern jedoch helfen, effizienter über an das Programm übergebene Optionen Bescheid zu wissen. Außerdem gibt es nützliche Hilfsprogramme, die beim Parsen dieser Befehle helfen können, z. B.
getopt(3)
oder die nicht standardmäßigengetopt_long(3)
, um die Argumente eines Programms zu analysieren.Es ist schön, denn wir können mehrere kurze Optionen kombinieren, wie andere Antworten sagen, wie
tar -xzf myfile.tar.gz
.Wenn es ein "Lisa" -Argument für
ls
gäbe, hätte es wahrscheinlich eine andere Bedeutung zu tippenls -lisa
alsls --lisa
. Die ersteren sind diel
,i
,s
unda
Parameter, nicht das richtige Wort.Tatsächlich könnte man schreiben
ls -l -i -s -a
, was genau dasselbe bedeutet wiels -lisa
, aber das würde vom Programm abhängen.Es gibt auch Programme, die dieser Konvention nicht entsprechen. Vor allem für meinen Anblick
dd
undgcc
.quelle
kurze Optionen können zu einem einzigen Argument kombiniert werden;
Wenn wir lange Optionen mit einem Bindestrich zulassen, führt dies zu Mehrdeutigkeiten. Um dies zu beheben, verwenden wir einen Doppelstrich für lange Optionen.
quelle