Quelle est la différence entre les indicateurs à tiret simple et à double tiret sur les commandes du shell?
70
Je commence à travailler dans le shell et l'utilisation de ces commandes semble arbitraire. Y at-il une raison pour laquelle un drapeau a un tiret unique et un autre pourrait avoir un tiret double?
Un seul trait d'union peut être suivi de plusieurs indicateurs d'un seul caractère. Un double trait d'union préfixe une seule option multicaractère.
Considérons cet exemple:
tar -czf
Dans cet exemple, -czfspécifie trois drapeaux d'un seul caractère: c, zet f.
Considérons maintenant un autre exemple:
tar --exclude
Dans ce cas, --excludespécifie une seule option multicaractère nommée exclude. Le double tiret disambiguates l'argument de ligne de commande, assurant que l' tarinterprète comme au excludelieu d'une combinaison de e, x, c, l, u, det e.
@kylex, non, puisqu'il n'y a pas d'option longue nommée simplement "c" et que le - signifie une option longue, aucune option à un seul caractère ne s'ensuit.
Psusi
13
Parfois, même les commandes les plus longues peuvent être à tiret unique. Par exemple, 'cdrecord' utilise toutes les commandes à tiret unique (-eject -dao ...). Tout dépend du programme, mais la plupart (!) D'entre eux utilisent - pour les commandes uniques et - pour les commandes à plusieurs caractères (longues)
mulaz
8
@mulaz, oui, cdrecord fait pas mal de choses loufoques.
Psusi
10
gardez également à l'esprit - utilisé seul signifie généralement la fin des options. voir ici pour plus d'informations: unix.stackexchange.com/questions/11376/…
Sirex
3
@killjoy, car, que ce soit par ignorance ou par choix, les auteurs de ces programmes n'ont bien sûr pas suivi la convention. Tout comme cdrecordmentionné il y a des années dans les commentaires ci-dessus.
psusi
17
Tout dépend du programme. Habituellement, "-" est utilisé pour les options "courtes" (une lettre, -h), et "-" pour les options "longues" (--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 trait d'union minuscule ASCII est généralement utilisé pour spécifier des options. Le caractère est généralement suivi d'une ou plusieurs lettres. Un argument qui ne comporte qu'un seul trait d'union, sans lettre, indique 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 tirets - moins (-) sont utilisés sur certains programmes pour spécifier des "options longues" dans lesquelles des noms d'options plus descriptifs sont utilisés. C'est une caractéristique commune du logiciel GNU.
Alors pourquoi est-ce java -version et ant -version, alors?
killjoy
7
C'est vraiment une convention. Cependant, cela peut aider les analyseurs syntaxiques à connaître plus efficacement les options transmises au programme. En outre, il existe des utilitaires soignés qui peuvent aider à analyser ces commandes, tels que getopt(3)ou le non standard getopt_long(3)pour aider à analyser les arguments d'un programme.
C'est bien, car nous pouvons avoir plusieurs options courtes combinées, comme le disent d'autres réponses, comme tar -xzf myfile.tar.gz.
S'il y avait un argument "lisa" ls, il y aurait probablement un sens différent à taper à ls -lisacelui de ls --lisa. Les premiers sont les l, i, set les aparamètres, pas le mot.
En fait, vous pourriez écrire ls -l -i -s -aexactement la même chose que ls -lisa, mais cela dépend du programme.
Il y a aussi des programmes qui n'obéissent pas à cette convention. Plus particulièrement pour ma vue, ddet gcc.
options courtes avec tiret unique 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 tiret unique, cela crée une ambiguïté. Pour résoudre ce problème, nous utilisons un double tiret pour les options longues.
Réponses:
Un seul trait d'union peut être suivi de plusieurs indicateurs d'un seul caractère. Un double trait d'union préfixe une seule option multicaractère.
Considérons cet exemple:
Dans cet exemple,
-czf
spécifie trois drapeaux d'un seul caractère:c
,z
etf
.Considérons maintenant un autre exemple:
Dans ce cas,
--exclude
spécifie une seule option multicaractère nomméeexclude
. Le double tiret disambiguates l'argument de ligne de commande, assurant que l'tar
interprète comme auexclude
lieu d'une combinaison dee
,x
,c
,l
,u
,d
ete
.la source
cdrecord
mentionné il y a des années dans les commentaires ci-dessus.Tout dépend du programme. Habituellement, "-" est utilisé pour les options "courtes" (une lettre, -h), et "-" pour les options "longues" (--help).
Les options courtes peuvent généralement être combinées (donc "-h -a" est identique à "-ha")
la source
la source
C'est vraiment une convention. Cependant, cela peut aider les analyseurs syntaxiques à connaître plus efficacement les options transmises au programme. En outre, il existe des utilitaires soignés qui peuvent aider à analyser ces commandes, tels que
getopt(3)
ou le non standardgetopt_long(3)
pour aider à analyser les arguments d'un programme.C'est bien, car nous pouvons avoir plusieurs options courtes combinées, comme le disent d'autres réponses, comme
tar -xzf myfile.tar.gz
.S'il y avait un argument "lisa"
ls
, il y aurait probablement un sens différent à taper àls -lisa
celui dels --lisa
. Les premiers sont lesl
,i
,s
et lesa
paramètres, pas le mot.En fait, vous pourriez écrire
ls -l -i -s -a
exactement la même chose quels -lisa
, mais cela dépend du programme.Il y a aussi des programmes qui n'obéissent pas à cette convention. Plus particulièrement pour ma vue,
dd
etgcc
.la source
les options courtes peuvent être combinées en un seul argument;
Si nous autorisons les options longues avec un tiret unique, cela crée une ambiguïté. Pour résoudre ce problème, nous utilisons un double tiret pour les options longues.
la source