Que signifie “-” (double tiret)? (aussi appelé «double tiret nu»)

469

J'ai vu --utilisé dans la compgencommande.

Par exemple:

compgen -W "foo bar baz" -- b

Quel est le sens du --dedans là?

dogbane
la source

Réponses:

583

Plus précisément, un double tiret ( --) est utilisé dans les commandes intégrées bash et de nombreuses autres commandes pour indiquer les options de fin de commande, après quoi seuls les paramètres de position sont acceptés.

Exemple d'utilisation: disons que vous voulez grep un fichier pour la chaîne -v- -vsera normalement considérée comme l'option permettant d'inverser le sens de la correspondance (affiche uniquement les lignes qui ne correspondent pas), mais --vous pouvez utiliser grep pour une chaîne -vcomme ceci:

grep -- -v file
Guss
la source
3
Plus particulièrement dans le Bash setintégré, où il est absolument nécessaire.
l0b0
10
--fonctionne pour séparer les options des expressions régulières dans grep, mais la manière canonique consiste à utiliser -e/ --regexp.
l0b0
5
@ l0b0: le motif à rechercher est normalement l'un des paramètres de position, il peut donc tenir après le --, bien que vous ayez raison de noter que mon exemple ci-dessus pourrait également être écrit ainsi grep -e -v file(bien que cela soit très déroutant).
Guss
2
Toutes les bashcommandes intégrées ne sont pas acceptées --comme marqueur de fin d’option. [et echone le faites pas par exemple ( une des raisons echone peut pas être utilisée de manière fiable ).
Stéphane Chazelas
44

Ceci marque la fin de la liste des paramètres (options).

polemon
la source
39

Dans man bashnous pouvons lire dans la section Commandes intégrées Shell :

Sauf indication contraire, chaque commande intégrée documentée dans cette section sous la forme d'une option d'acceptation précédée de -accepte -- de signifier la fin des options .

Les :, true, falseet testbuiltins n'acceptent pas les options et ne traitent pas --spécialement. Le exit, logout, break, continue, letet shiftbuiltins accepter et arguments de processus commençant par -sans nécessiter --. D'autres commandes intégrées qui acceptent des arguments mais ne sont pas spécifiées comme options d'acceptation interprètent les arguments commençant par -des options non valides et nécessitent --d'empêcher cette interprétation.

Notez que cela echon'interprète pas --la fin des options.

Kenorb
la source
2
+1 pour le référencement man bash(note-to-self pour la prochaine fois).
user3773048
11

POSIX.1-2017

12.2 Instructions pour la syntaxe des utilitaires

Directive 10:

Le premier --argument qui n'est pas un argument d'option doit être accepté comme un délimiteur indiquant la fin des options. Tous les arguments suivants doivent être traités comme des opérandes, même s'ils commencent par le caractère ' -'.

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02

John Doe
la source