Bash verhält sich etwas ungewöhnlich, wenn es darum geht -
.
POSIX sagt:
Leitlinie 10:
Das erste --
Argument, das kein Optionsargument ist, sollte als Trennzeichen für das Ende von Optionen akzeptiert werden. Alle folgenden Argumente sollten als Operanden behandelt werden, auch wenn sie mit dem -
Zeichen beginnen .
[…]
Richtlinie 13:
Für Dienstprogramme, die Operanden verwenden, um Dateien darzustellen, die zum Lesen oder Schreiben geöffnet werden -
sollen , sollte der Operand nur als Standardeingabe (oder als Standardausgabe, wenn aus dem Kontext klar hervorgeht, dass eine Ausgabedatei angegeben wird) oder als a bezeichnet werden Datei mit dem Namen -
.
Und
Wenn ein Dienstprogramm, das im Shell- und Dienstprogramm-Band von POSIX.1-2017 als konform mit diesen Richtlinien beschrieben ist, den Operanden -
als Standardeingabe oder -ausgabe akzeptieren oder nicht akzeptieren soll, wird diese Verwendung im Abschnitt OPERANDS erläutert. Wenn in einem solchen Dienstprogramm Operanden zur Darstellung von Dateien verwendet werden, wird durch die Implementierung festgelegt, ob der Operand -
für die Standardeingabe (oder die Standardausgabe) oder für eine Datei mit dem Namen steht -
.
Aber dann man 1 bash
heißt es:
A --
signalisiert das Ende von Optionen und deaktiviert die weitere Optionsverarbeitung. Alle Argumente nach dem --
werden als Dateinamen und Argumente behandelt. Ein Argument von -
ist äquivalent zu --
.
Für Bash -
bedeutet dies weder Standardeingabe noch eine Datei, daher etwas ungewöhnlich.
Nun zu Ihrem speziellen Fall:
curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
Ich vermute, dass der Autor dieses Befehls möglicherweise nicht erkennt -
, dass er --
in diesem Fall dem entspricht. Ich vermute, der Autor wollte sicherstellen bash
, dass aus seiner Standardeingabe gelesen wird, sie sollte -
nach der Richtlinie 13 funktionieren.
Aber selbst wenn es nach der Richtlinie funktioniert, -
wäre es hier unnötig, da es bash
erkennt, wenn seine Standardeingabe eine Pipe ist und entsprechend verhält (sofern nichts -c
anderes angegeben ist).
Funktioniert -
aber nicht nach der Richtlinie, es funktioniert wie --
. Trotzdem --
ist das hier unnötig, da es keine Argumente danach gibt.
Meiner Meinung nach -
ändert das Letzte nichts. Der Befehl würde ohne ihn funktionieren.
Sehen Sie sich das folgende Beispiel an, um zu sehen, wie nützlich --
und -
nützlich es im Allgemeinen sein kann.
cat
In meinem Kubuntu werden beide Richtlinien befolgt und ich werde sie verwenden, um die Nützlichkeit von -
und zu demonstrieren --
.
Lassen Sie eine Datei mit dem Namen foo
existieren. Dadurch wird die Datei gedruckt:
cat foo
Lassen Sie eine Datei mit dem Namen --help
existieren. Die Datei wird nicht gedruckt:
cat --help
Aber dies wird die Datei mit dem Namen drucken --help
:
cat -- --help
Dadurch wird die genannte Datei --help
mit der Standardeingabe verknüpft:
cat -- --help -
Es scheint, dass Sie es nicht wirklich brauchen --
, da Sie immer übergeben können, ./--help
was mit Sicherheit als Datei interpretiert wird. Aber bedenken Sie
cat "$file"
wenn Sie vorher nicht wissen, was der Inhalt der Variablen ist. Sie können es nicht einfach voranstellen ./
, da es ein absoluter Pfad sein kann und ./
ihn brechen würde. Andererseits kann es sich um eine Datei mit dem Namen handeln--help
(warum nicht?). In diesem Fall --
ist sehr nützlich; Dies ist ein viel robusterer Befehl:
cat -- "$file"