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 -v
será considerada a opção de reverter o significado correspondente (apenas mostrar linhas que não correspondem), mas com --
você pode grep para uma string -v
como 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).
bash
comandos internos aceitam --
como marcador de fim de opção. [
e echo
não por exemplo ( um dos motivos echo
não pode ser usado com segurança ).
Em man bash
podemos 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
, etest
builtins não aceitam opções e não tratar--
de forma especial. Aexit
,logout
,break
,continue
,let
, eshift
builtins 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
echo
nã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
set
embutido, onde é absolutamente necessário.