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 bash
legge:
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 bash
che 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é bash
rileva quando il suo input standard è una pipe e agisce di conseguenza (a meno che non -c
venga 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.
cat
nel mio Kubuntu obbedisce a entrambe le linee guida e lo userò per dimostrare l'utilità di -
e--
.
Lascia che foo
esista un file chiamato . Questo stamperà il file:
cat foo
Lascia che --help
esista un file chiamato . Questo non stampa il file:
cat --help
Ma questo stamperà il file chiamato --help
:
cat -- --help
Ciò concatenerà il file denominato --help
con qualsiasi cosa provenga dall'input standard:
cat -- --help -
Sembra che non ti serva davvero --
, perché puoi sempre passare ./--help
quale 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"