Le plus courant est GNU getopt
style, avec un tiret pour les options courtes et deux tirets pour les options longues.
-
Initialement, les programmes Unix prenaient des options à une seule lettre précédées d'un seul tiret et éventuellement regroupées :
ls -laF ls -l -a -F
Les deux commandes ci-dessus sont égales.
Lorsqu'une option prend une valeur, elle remplace le groupement :dans
gpg -aofoo.gpg
,-a
et-o
sont des options etfoo.gpg
est la valeur donnée à-o
. -
La plupart d'entre eux l'ont fait, de toute façon.
tar cvzf
est un spectacle courant. Les versions actuelles acceptenttar -cvzf
aussi, et selon que vous ajoutez ou non le tiret, les arguments seront interprétés de manière très différente. Par exemple, ces deux signifient la même chose (notez que les options sans tiret ne sont pas juste avant leur valeur) :tar -xf file.tgz -vzO /etc/passwd /var/backups
tar xfvzO file.tgz /etc/passwd /var/backups
BSD
ps
utilise toujours-
; SysVps
ne fait jamais. La version Linux accepte les deux versions et modifie son comportement selon qu'une option a été précédée ou non d'un tiret. (Contrairement à l'exemple tar ci-dessus, ps change l'option significations également.) -
Les programmes X11 utilisaient des options longues précédées d'un simple tiret ou parfois d'un signe plus :
xterm -class FooTerm +vb -u8
Cela définit les options
class
etu8
, et annule levb
option.Le style X11 est incompatible avec le groupement d'options.
-
Plus tard, des options longues ont été ajoutées à GNU
getopt()
d'une manière compatible avec les options à une lettre.gpg -se --no-armor --output=signed.gpg
Cela définit
-s
,-e
, et--no-armor
(qui est opposé à--armor
).Habituellement,
--output=signed.gpg
et--output signed.gpg
sont équivalents. (Mais pas toujours - par exemple, curl n'accepte pas le premier, seulement le second.)(Si je me souviens bien, les options longues utilisaient
+
comme préfixe avant d'être remplacé par--
.) -
La spécification POSIX comporte une section Utility Argument Syntax, qui décrit les options à un caractère.
La plupart des programmes Windows utilisent leurs propres analyseurs, ce qui rend les utilisateurs fous.
- Certains nécessitent
/a /b /c
, d'autres autorisent le style VMS/a/b/c
, d'autres encore préfèrent le style Unix/abc
. - Le plus utilisé
/
comme préfixe, certains acceptent aussi-
, les autres n'acceptent que-
. - Les valeurs peuvent être données sous la forme
/foo bar
,/foo=bar
,/foo:bar
. - Habituellement, les espaces peuvent être
/quoted "like this"
, mais certains programmes prennent le"
comme caractère littéral. (C'est un inconvénient de laisser le programme faire son propre découpage de mots ; sous Unix, cela est géré par le shell.) - Les programmes multiplateformes peuvent utiliser une implémentation de
getopt
.
En général, le premier se trouve dans des programmes plus anciens qui sont trop bien ancrés pour changer. Ce type d'options longues est incompatible avec le standard getopt()
fonction.
Le deuxième style a été introduit par GNU getopt_long()
, et est conforme aux normes existantes qui s'attendent à ce que le premier style soit regroupé avec des options courtes (c'est-à-dire -orange
devrait signifier -o -r -a -n -g -e
). Ce style d'option longue est fortement préféré.