Was bedeutet "-" (Doppelstrich)? (auch bekannt als "Bare Double Dash")

469

Ich habe --in dem compgenBefehl verwendet gesehen.

Zum Beispiel:

compgen -W "foo bar baz" -- b

Was bedeutet das --dort?

Dogbane
quelle

Antworten:

583

Genauer gesagt wird ein doppelter Bindestrich ( --) in integrierten Bash-Befehlen und vielen anderen Befehlen verwendet, um das Ende der Befehlsoptionen zu kennzeichnen. Danach werden nur Positionsparameter akzeptiert.

Beispielanwendung: Nehmen wir an, Sie möchten eine Datei für die Zeichenfolge abrufen -v- normalerweise -vwird die Option in Betracht gezogen, die übereinstimmende Bedeutung umzukehren (nur nicht übereinstimmende Zeilen anzeigen). Mit dieser Option --können Sie jedoch eine Zeichenfolge abrufen -v:

grep -- -v file
Guss
quelle
3
Vor allem im seteingebauten Bash , wo es unbedingt nötig ist.
l0b0
10
--funktioniert, um Optionen von regulären Ausdrücken in zu trennen grep, aber die kanonische Art ist, -e/ zu verwenden --regexp.
l0b0
5
@ l0b0: Das zu durchsuchende Muster ist normalerweise einer der Positionsparameter, daher kann es nach dem passen --, obwohl Sie richtig bemerken, dass mein Beispiel oben auch als geschrieben werden könnte grep -e -v file(obwohl das sehr verwirrend ist).
Guss
2
Nicht alle basheingebauten Befehle akzeptieren --das Ende der Optionsmarkierung. [und echonicht zum Beispiel ( einer der Gründe echokann nicht zuverlässig verwendet werden ).
Stéphane Chazelas
44

Dies markiert das Ende der Parameterliste (Option).

Polemon
quelle
39

In können man bashwir in Shell Builtin Commands Abschnitt lesen :

Wenn nicht anders angegeben, die jeweils eingebauter Befehl in diesem Abschnitt dokumentierte Optionen wie die Annahme vorangestellte -akzeptiert -- das Ende der Optionen zu bedeuten .

Die :, true, falseund testbuiltins akzeptieren keine Optionen und behandeln nicht --speziell. Die exit, logout, break, continue, let, und shiftbuiltins annehmen und verarbeiten Argumente beginnend mit , -ohne --. Andere integrierte Funktionen, die Argumente akzeptieren, aber nicht als akzeptierende Optionen angegeben sind, interpretieren Argumente, die mit -ungültigen Optionen beginnen, und müssen --diese Interpretation verhindern.

Beachten Sie, dass echodies nicht --das Ende von Optionen bedeutet.

Kenorb
quelle
2
+1 für die Referenzierung man bash(Notiz für das nächste Mal:).
user3773048
11

POSIX.1-2017

12.2 Richtlinien für die Utility-Syntax

Leitlinie 10:

Das erste --Argument, das kein Optionsargument ist, sollte als Begrenzer für das Ende der Optionen akzeptiert werden. Alle folgenden Argumente sollten als Operanden behandelt werden, auch wenn sie mit dem -Zeichen ' ' beginnen .

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02

John Doe
quelle