web-dev-qa-db-fra.com

Que signifie "-" (double tiret)?

J'ai vu -- utilisé dans la commande compgen.

Par exemple:

compgen -W "foo bar baz" -- b

Quelle est la signification du -- là-dedans?

518
dogbane

Plus précisément, un double tiret (--) est utilisé dans la plupart des commandes bash intégrées et dans de nombreuses autres commandes pour signifier la fin des options 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 - normalement -v sera considéré comme l'option pour inverser la signification correspondante (afficher uniquement les lignes qui ne correspondent pas), mais avec -- vous pouvez grep pour la chaîne -v comme ça:

grep -- -v file
631
Guss

Dans man bash nous pouvons lire dans la section Commandes intégrées du shell :

Sauf indication contraire, chaque commande intégrée documentée dans cette section comme acceptant les options précédées de - accepte --pour signifier la fin des options.

Le :, true, false et test les commandes internes n'acceptent pas les options et ne traitent pas -- spécialement. Les commandes internes exit, logout, break, continue, let et shift acceptent et traitent les arguments commençant par - sans exiger --. Les autres commandes internes qui acceptent des arguments mais ne sont pas spécifiées comme acceptant des options interprètent des arguments commençant par - comme options invalides et nécessitent -- pour empêcher cette interprétation.

Notez que echo n'interprète pas -- pour signifier la fin des options.

48
kenorb

Cela marque la fin de la liste des paramètres (option).

47
polemon

POSIX.1-2017

12.2 Consignes de syntaxe de l'utilitaire

Directive 10:

La première -- l'argument qui n'est pas un argument-option doit être accepté comme 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 '-' personnage.

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

18
John Doe