O Bash se comporta de maneira um pouco fora do padrão -.
O POSIX diz:
Diretriz 10:
O primeiro --argumento que não é um argumento de opção deve ser aceito como um delimitador indicando o final das opções. Quaisquer argumentos a seguir devem ser tratados como operandos, mesmo se começarem com o -caractere.
[...]
Diretriz 13:
Para utilitários que usam operandos para representar arquivos a serem abertos para leitura ou gravação, o -operando deve ser usado para significar apenas entrada padrão (ou saída padrão quando estiver claro no contexto que um arquivo de saída está sendo especificado) ou um arquivo nomeado -.
E
Quando um utilitário descrito no volume Shell e Utilitários do POSIX.1-2017, em conformidade com estas diretrizes, é necessário para aceitar ou não aceitar, o operando -para significar entrada ou saída padrão, esse uso é explicado na seção OPERANDS. Caso contrário, se esse utilitário usar operandos para representar arquivos, será definido pela implementação se o operando -representa entrada padrão (ou saída padrão) ou um arquivo nomeado -.
Mas então man 1 bashlê:
A --sinaliza o fim das opções e desativa o processamento adicional das opções. Quaisquer argumentos após o --são tratados como nomes de arquivos e argumentos. Um argumento de -é equivalente a --.
Portanto, para Bash -não significa entrada padrão nem arquivo, portanto, algo fora do padrão.
Agora seu caso particular:
curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
Eu suspeito que o autor deste comando pode não perceber que -é equivalente a --neste caso. Eu suspeito que o autor queria ter certeza bashirá ler a partir de sua entrada padrão, que esperavam -para trabalhar de acordo com a diretriz 13.
Mas, mesmo que funcionasse de acordo com a diretriz, -seria desnecessário aqui porque bashdetecta quando sua entrada padrão é um tubo e age de acordo (a menos que -cseja fornecido etc.).
No entanto -, não funciona de acordo com a diretriz, funciona como --. Ainda --é desnecessário aqui porque não há argumentos após isso.
Na minha opinião, a última -não muda nada. O comando funcionaria sem ele.
Para ver como --e -pode ser útil em geral, estude o exemplo abaixo.
catno meu Kubuntu obedece a ambas as diretrizes e vou usá-lo para demonstrar a utilidade de -e --.
Deixe um arquivo chamado fooexistir. Isso imprimirá o arquivo:
cat foo
Deixe um arquivo chamado --helpexistir. Isso não imprimirá o arquivo:
cat --help
Mas isso imprimirá o arquivo chamado --help:
cat -- --help
Isso concatenará o arquivo nomeado --helpcom o que vier da entrada padrão:
cat -- --help -
Parece que você realmente não precisa --, porque você sempre pode passar o ./--helpque será interpretado como um arquivo, com certeza. Mas considere
cat "$file"
quando você não sabe de antemão qual é o conteúdo da variável. Você não pode simplesmente anexá ./-lo a ele, porque pode ser um caminho absoluto e ./o quebraria. Por outro lado, pode ser um arquivo chamado --help(porque por que não?). Neste caso --é muito útil; este é um comando muito mais robusto:
cat -- "$file"