Bash si comporta in modo alquanto non standard quando si tratta di - .
POSIX dice:
Orientamento 10:
Il primo--argomento che non è un argomento di opzione dovrebbe essere accettato come delimitatore che indica la fine delle opzioni. Tutti gli argomenti successivi devono essere trattati come operandi, anche se iniziano con-carattere.[…]
Orientamento 13:
Per le utilità che usano gli operandi per rappresentare i file da aprire per la lettura o la scrittura, il-operando dovrebbe essere usato per indicare solo input standard (o output standard quando è chiaro dal contesto che è stato specificato un file di output) o un file chiamato-.
E
Quando un'utilità descritta nel volume Shell and Utilities di POSIX.1-2017 come conforme a queste linee guida è tenuta ad accettare o non accettare l'operando
-per indicare input o output standard, questo utilizzo è spiegato nella sezione OPERANDI. Altrimenti, se tale utilità utilizza gli operandi per rappresentare i file, è definito dall'implementazione se l'operando-sta per standard input (o standard output), o per un file chiamato-.
Ma poi man 1 bash recita:
Un
--segnala la fine delle opzioni e disabilita l'ulteriore elaborazione delle opzioni. Qualsiasi argomento dopo--vengono trattati come nomi di file e argomenti. Un argomento di-equivale a--.
Quindi per Bash - non significa né input standard né file, quindi in qualche modo non standard.
Ora il tuo caso particolare:
curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
sospetto l'autore di questo comando potrebbe non realizzare - equivale a -- in questo caso. sospetto l'autore voleva assicurarsi che bash leggerà dal suo input standard, si aspettavano - lavorare secondo la linea guida 13.
Ma anche se funzionasse secondo le linee guida, - non sarebbe necessario qui perché bash rileva quando il suo input standard è una pipe e agisce di conseguenza (a meno che -c è dato ecc.).
Ancora - non funziona secondo le linee guida, funziona come -- . Ancora -- non è necessario qui perché non ci sono argomenti dopo di esso.
Secondo me l'ultimo - non cambia nulla. Il comando funzionerebbe senza di esso.
Per vedere come -- e - può essere utile in generale, studia l'esempio qui sotto.
cat nel mio Kubuntu obbedisce a entrambe le linee guida e lo userò per dimostrare l'utilità di - e -- .
Lascia un file chiamato foo esistere. Questo stamperà il file:
cat foo
Lascia un file chiamato --help esistere. Questo non stamperà il file:
cat --help
Ma questo stamperà il file chiamato --help :
cat -- --help
Questo concatenerà il file chiamato --help con tutto ciò che proviene dallo standard input:
cat -- --help -
Sembra che tu non abbia davvero bisogno di -- , perché puoi sempre superare ./--help che sarà interpretato come un file di sicuro. Ma considera
cat "$file"
quando non sai in anticipo quale sia il contenuto della variabile. Non puoi semplicemente anteporre ./ ad esso, perché potrebbe essere un percorso assoluto e ./ lo spezzerebbe. D'altra parte potrebbe essere un file chiamato --help (perché perché no?). In questo caso -- è molto utile; questo è un comando molto più robusto:
cat -- "$file"
In man bash , alla fine delle opzioni a carattere singolo c'è:-
-- 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 --.
Se hai citato il comando completo, non vedo alcun motivo per utilizzare - dopo bash in questo caso, ma non nuoce.