O que significa "-" (traço duplo)? (também conhecido como "traço duplo nu")

469

Eu já vi --usado no compgencomando.

Por exemplo:

compgen -W "foo bar baz" -- b

Qual é o significado do --lá dentro?

dogbane
fonte

Respostas:

583

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
Guss
fonte
3
Mais notavelmente no Bash setembutido, onde é absolutamente necessário.
L0b0 18/10/12
10
--trabalha para separar opções de expressões regulares em grep, mas a forma canônica é usar -e/ --regexp.
L0b0 18/10/12
5
@ l0b0: o padrão de pesquisa é normalmente um dos parâmetros de posição, para que possa caber após a --, 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).
Guss
2
Nem todos os 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 ).
Stéphane Chazelas 21/03
44

Isso marca o final da lista de parâmetros (opção).

polemon
fonte
39

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, e testbuiltins não aceitam opções e não tratar --de forma especial. A exit, logout, break, continue, let, e shiftbuiltins 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.

kenorb
fonte
2
+1 para referência man bash(nota para si mesmo na próxima vez:).
user3773048
11

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

John Doe
fonte