Bash si comporta in un modo un po 'fuori dal comune quando si tratta di -.
POSIX dice:
Linea guida 10:
Il primo --argomento che non è un argomento-opzione dovrebbe essere accettato come delimitatore che indica la fine delle opzioni. Eventuali argomenti seguenti devono essere trattati come operandi, anche se iniziano con il -carattere.
[...]
Linea guida 13:
per le utility che utilizzano gli operandi per rappresentare i file da aprire per la lettura o la scrittura, l' -operando dovrebbe essere usato per indicare solo input standard (o output standard quando è chiaro dal contesto che viene specificato un file di output) o un file denominato -.
E
Laddove un'utilità descritta nel volume Shell and Utilities di POSIX.1-2017 come conforme a queste linee guida sia richiesta per accettare o non accettare l'operando -come input o output standard, questo utilizzo è spiegato nella sezione OPERANDS. Altrimenti, se tale utility utilizza operandi per rappresentare i file, viene definito dall'implementazione se l'operando -sta per input standard (o output standard) o per un file denominato- .
Ma poi man 1 bashlegge:
A --segnala la fine delle opzioni e disabilita l'ulteriore elaborazione delle opzioni. Eventuali argomenti dopo il --sono trattati come nomi di file e argomenti. Un argomento di -equivale a --.
Quindi per Bash -non significa né input standard né un file, quindi un po 'non standard.
Ora il tuo caso particolare:
curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
Ho il sospetto che l'autore di questo comando potrebbe non rendersi conto -che --in questo caso è equivalente . Ho il sospetto che l'autore volesse assicurarsi bashche leggesse dal suo input standard, si aspettavano -che funzionasse secondo la linea guida 13.
Ma anche se funzionasse secondo le linee guida, -qui non sarebbe necessario perché bashrileva quando il suo input standard è una pipe e agisce di conseguenza (a meno che non -cvenga fornito ecc.).
Eppure -non funziona secondo le linee guida, funziona come --. --Qui non è ancora necessario perché non ci sono argomenti dopo.
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 di seguito.
catnel mio Kubuntu obbedisce a entrambe le linee guida e lo userò per dimostrare l'utilità di -e-- .
Lascia che fooesista un file chiamato . Questo stamperà il file:
cat foo
Lascia che --helpesista un file chiamato . Questo non stampa il file:
cat --help
Ma questo stamperà il file chiamato --help:
cat -- --help
Ciò concatenerà il file denominato --helpcon qualsiasi cosa provenga dall'input standard:
cat -- --help -
Sembra che non ti serva davvero --, perché puoi sempre passare ./--helpquale sarà sicuramente interpretato come un file. 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"