web-dev-qa-db-fra.com

Quelle est la différence entre les drapeaux simple tiret et double tiret sur les commandes Shell?

Je suis nouveau dans le shell et l'utilisation de ces commandes semble arbitraire. Y a-t-il une raison pour laquelle un drapeau a un seul tiret et un autre peut avoir un double tiret?

79
kylex

Un seul tiret peut être suivi de plusieurs indicateurs à un seul caractère. Un double trait d'union préfixe une seule option à caractères multiples.

Considérez cet exemple:

tar -czf

Dans cet exemple, -czf spécifie trois indicateurs à un seul caractère: c, z et f.

Prenons maintenant un autre exemple:

tar --exclude

Dans ce cas, --exclude spécifie une seule option à caractères multiples nommée exclude. Le double trait d'union dissipe l'ambiguïté de la ligne de commande, garantissant que tar l'interprète comme exclude plutôt qu'une combinaison de e, x, c, l, u, d et e.

120
psusi

Tout dépend du programme. Généralement, "-" est utilisé pour les options "courtes" (une lettre, -h) et "-" est utilisé pour les options "longues" (er) (--help).

Les options courtes peuvent généralement être combinées (donc "-h -a" est identique à "-ha")

Dans les systèmes de type Unix, le tiret ASCII moins est généralement utilisé pour spécifier les options. Le caractère est généralement suivi d'une ou plusieurs lettres. Un argument qui est un trait d'union seul moins sans lui-même sans toutes les lettres spécifient généralement qu'un programme doit gérer les données provenant de l'entrée standard ou envoyer des données à la sortie standard. Deux traits d'union moins (-) sont utilisés sur certains programmes pour spécifier les "options longues" où des noms d'options plus descriptifs sont utilisés. C'est une caractéristique courante du logiciel GNU.

source

20
mulaz

C'est vraiment une convention. Cependant, cela peut aider les parseurs à connaître plus efficacement les options transmises au programme. En outre, il existe des utilitaires pratiques qui peuvent aider à analyser ces commandes, tels que getopt(3) ou non standard getopt_long(3) pour aider analyser les arguments d'un programme.

C'est bien, car nous pouvons combiner plusieurs options courtes, comme le disent d'autres réponses, comme tar -xzf myfile.tar.gz.

S'il y avait un argument "Lisa" pour ls, il y aurait probablement une signification différente pour taper ls -Lisa que ls --Lisa. Les premiers sont les paramètres l, i, s et a, pas le mot.

En fait, vous pourriez écrire ls -l -i -s -a, ce qui signifie exactement la même chose que ls -Lisa, mais cela dépendrait du programme.

Il existe également des programmes qui n'obéissent pas à cette convention. Notamment pour ma vue, dd et gcc.

10
ssice

options courtes avec tiret simple vs options longues avec tiret double

les options courtes peuvent être combinées en un seul argument;

for example: ls -lrt #instead of ls -l -r -t

Si nous autorisons les options longues avec un seul tiret, cela crée une ambiguïté. Pour résoudre ce problème, nous utilisons un double tiret pour les options longues.

4
Premraj