Respostas:
Mais precisamente, um traço duplo ( --) é usado nos comandos internos do bash e em muitos outros comandos para significar o final das opções de comando, após o qual apenas parâmetros posicionais são aceitos.
Exemplo de uso: digamos que você queira grep um arquivo para a string -v- normalmente -vserá considerada a opção de reverter o significado correspondente (apenas mostrar linhas que não correspondem), mas com --você pode grep para uma string -vcomo esta:
grep -- -v file
--trabalha para separar opções de expressões regulares em grep, mas a forma canônica é usar -e/ --regexp.
--, embora você está correto em ressaltar que meu exemplo acima também pode ser escrito como grep -e -v file(apesar de que é muito confuso).
bashcomandos internos aceitam --como marcador de fim de opção. [e echonão por exemplo ( um dos motivos echonão pode ser usado com segurança ).
Em man bashpodemos ler na seção Comandos internos do shell :
A menos que indicado de outra forma, cada comando interno documentado nesta seção como aceitando opções precedidas por
-accept--significa o final das opções .Os
:,true,false, etestbuiltins não aceitam opções e não tratar--de forma especial. Aexit,logout,break,continue,let, eshiftbuiltins aceitar e argumentos processo começando com-sem exigir--. Outros componentes internos que aceitam argumentos, mas não são especificados como opções de aceitação, interpretam argumentos que começam com-opções inválidas e exigem--essa interpretação.Observe que
echonão interpreta--o fim das opções.
man bash(nota para si mesmo na próxima vez:).
POSIX.1-2017
12.2 Diretrizes de sintaxe do utilitário
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 ' '.
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02
setembutido, onde é absolutamente necessário.