Bash verhält sich etwas ungewöhnlich, wenn es um - geht .
POSIX sagt:
Richtlinie 10:
Die erste -- Argument, das kein Optionsargument ist, sollte als Trennzeichen akzeptiert werden, das das Ende von Optionen angibt. Alle folgenden Argumente sollten als Operanden behandelt werden, auch wenn sie mit - beginnen Zeichen.
[…]
Richtlinie 13:
Für Dienstprogramme, die Operanden verwenden, um Dateien darzustellen, die zum Lesen oder Schreiben geöffnet werden sollen, wird der - Operand sollte verwendet werden, um nur die Standardeingabe (oder die Standardausgabe, wenn aus dem Kontext klar ist, dass eine Ausgabedatei angegeben wird) oder eine Datei mit dem Namen - zu bezeichnen .
Und
Wenn ein Dienstprogramm, das im Band Shell and Utilities von POSIX.1-2017 als konform mit diesen Richtlinien beschrieben wird, den Operanden - akzeptieren oder nicht akzeptieren muss bedeutet Standardeingabe oder -ausgabe, diese Verwendung wird im Abschnitt OPERANDEN erklärt. Andernfalls, wenn ein solches Dienstprogramm Operanden verwendet, um Dateien darzustellen, ist es implementierungsdefiniert, ob der Operand - steht für Standardeingabe (oder Standardausgabe) oder für eine Datei namens - .
Aber dann man 1 bash lautet:
Ein -- signalisiert das Ende der Optionen und sperrt die weitere Optionsverarbeitung. Alle Argumente nach -- werden als Dateinamen und Argumente behandelt. Ein Argument von - entspricht -- .
Also für Bash - bedeutet weder Standardeingabe noch eine Datei, daher etwas nicht standardisiert.
Nun zu Ihrem speziellen Fall:
curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
Ich vermute Der Autor dieses Befehls erkennt möglicherweise - nicht entspricht -- in diesem Fall. Ich vermute der Autor wollte sicherstellen, dass bash wird von seiner Standardeingabe gelesen, sie erwarteten - gemäß Richtlinie 13 zu arbeiten.
Aber auch wenn es nach der Richtlinie - funktioniert hat wäre hier unnötig, weil bash erkennt, wenn seine Standardeingabe eine Pipe ist, und verhält sich entsprechend (es sei denn, -c gegeben ist usw.).
Doch - funktioniert nicht nach Richtlinie, sondern wie -- . Immer noch -- ist hier unnötig, weil es keine Argumente danach gibt.
Meiner Meinung nach die letzte - ändert nichts. Der Befehl würde auch ohne funktionieren.
Um zu sehen, wie -- und - allgemein nützlich sein können, sehen Sie sich das Beispiel unten an.
cat in meinem Kubuntu befolgt beide Richtlinien und ich werde es verwenden, um die Nützlichkeit von - zu demonstrieren und -- .
Lassen Sie eine Datei namens foo existieren. Dies druckt die Datei:
cat foo
Lassen Sie eine Datei namens --help existieren. Dadurch wird die Datei nicht gedruckt:
cat --help
Aber dies wird die Datei namens --help drucken :
cat -- --help
Dadurch wird die Datei mit dem Namen --help verkettet mit was auch immer aus der Standardeingabe kommt:
cat -- --help -
Es scheint, dass Sie -- nicht wirklich brauchen , da Sie immer ./--help übergeben können die sicher als Datei interpretiert wird. Aber bedenke
cat "$file"
wenn Sie vorher nicht wissen, was der Inhalt der Variablen ist. Sie können ./ nicht einfach voranstellen da es ein absoluter Pfad sein kann und ./ würde es kaputt machen. Andererseits kann es sein eine Datei namens --help sein (weil warum nicht?). In diesem Fall -- ist sehr nützlich; Dies ist ein viel robusterer Befehl:
cat -- "$file"
In man bash , am Ende der Einzelzeichenoptionen steht:-
-- A -- signals the end of options and disables further option processing.
Any arguments after the -- are treated as filenames and arguments. An
argument of - is equivalent to --.
Wenn Sie den vollständigen Befehl zitiert haben, sehe ich keinen Grund, - zu verwenden nach bash in diesem Fall, aber es schadet nicht.