EDIT: Il a été souligné que ce style est un GNU-isme, et que les Unix non basés sur GNU ont tendance à utiliser une syntaxe à tiret unique (en particulier, les variantes OS X et BSD).
Malgré son statut GNU-ism, de nombreux programmes de style Unix nouvellement écrits utilisent ce style:
--long-option
pour les noms d'options longs,
-s
pour les options courtes (un caractère),
-abc
pour plusieurs options courtes sans arguments (un caractère par option).
- Options avec arguments:
--long arg
ou --long=arg
pour les options longues,
-s arg
, -sarg
ou (en option) -s=arg
pour les options courtes. Cela peut être combiné avec d'autres options courtes, tant que seule la dernière a un argument.
- La même option "sémantique" peut avoir plusieurs alias, le plus souvent un court (plus rapide à taper) et un long (plus facile à retenir).
Quiconque a utilisé un shell Linux pendant un certain temps doit être familier avec ce style 1 , il a donc le principe de la moindre surprise de son côté. Permettre le regroupement de plusieurs options courtes sans être ambigu avec des options longues est également agréable.
1 Par exemple, certains des programmes utilisant ce style (sur ma machine Linux): ls
, grep
, man
, sed
, bash
, etc. ( EDIT: ce sont apparemment GNU-ismes cependant, les machines BSD et Mac OS X n'utilisent pas ce style)
Il y a plusieurs bibliothèques qui peuvent se charger d'analyser ceci pour vous (la plus connue étant l'implémentation GNU de getopt ), vous n'avez besoin que de spécifier quelles options longues et courtes existent, si elles prennent un argument, et que faire quand un est trouvée. (Et bien sûr, que faire pour les arguments positionnels, c'est-à-dire ceux qui ne commencent pas par -
et qui ne sont pas des arguments des options précédentes)
find
est un très ancien programme (ou peut-être plus probable: une version réécrite d'un très ancien programme) qui ne peut pas être facilement modifié pour utiliser une nouvelle syntaxe de ligne de commande. Trop de scripts se briseraient et trop d'utilisateurs habitués à l'ancienne syntaxe se plaindraient. javac
a probablement été influencé par gcc
et amis, qui suivent également une ancienne syntaxe pour des raisons historiques.