Antworten:
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 -v
wird 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
--
funktioniert, um Optionen von regulären Ausdrücken in zu trennen grep
, aber die kanonische Art ist, -e
/ zu verwenden --regexp
.
--
, obwohl Sie richtig bemerken, dass mein Beispiel oben auch als geschrieben werden könnte grep -e -v file
(obwohl das sehr verwirrend ist).
bash
eingebauten Befehle akzeptieren --
das Ende der Optionsmarkierung. [
und echo
nicht zum Beispiel ( einer der Gründe echo
kann nicht zuverlässig verwendet werden ).
In können man bash
wir 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
,false
undtest
builtins akzeptieren keine Optionen und behandeln nicht--
speziell. Dieexit
,logout
,break
,continue
,let
, undshift
builtins 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
echo
dies nicht--
das Ende von Optionen bedeutet.
man bash
(Notiz für das nächste Mal:).
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
set
eingebauten Bash , wo es unbedingt nötig ist.