Il n'y a pas de norme répandue. Il y a une certaine cohérence, par exemple dans les programmes GNU, mais vous devez vérifier la documentation de chaque programme.
Citant Wikipedia , mon emphase:
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 caractères moins un trait d'union (-) 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.
En règle générale, les traits d'union indiquent un argument prédéfini. Je pense que cela sert à les différencier, par exemple, des noms de fichiers ou d’autres étiquettes que vous pourriez utiliser comme arguments. Ce n'est pas toujours le cas, cependant (voir ci-dessous).
Vous trouverez souvent le même argument disponible à la fois comme option courte et comme option longue, comme par exemple dans ls .
Certains programmes utilisent un seul trait d'union pour les options à un caractère et deux traits d'union pour les options à plusieurs caractères, mais pas tous (on pense find
à GNU ). Certains programmes ont des traits d'union optionnels ou les sautent complètement ( tar
ou BSD ps
vient à l'esprit).
Parfois, les options longues ( --foo
) nécessitent des arguments, alors que les options courtes ( -f
) ne le font pas (ou du moins, impliquent un argument par défaut spécifique).
Les options courtes (par exemple cut -d ' '
) peuvent avoir des arguments, alors que les options longues (par exemple ls --all
) ne les ont pas nécessairement.
Pour définir un comportement particulier d'un programme, vous devez parfois utiliser une option courte. Pour d'autres, vous devez utiliser une option longue et, pour certains, vous avez le choix.
Sur une note connexe, certains programmes ne peuvent gérer aucun espace entre une option et son argument , d’autres ne le peuvent pas.
Comme je l'ai écrit au début, il n'y a tout simplement pas de comportement ou de norme commun. Souvent, vous pouvez suivre un comportement similaire à la même bibliothèque que celle utilisée pour l'analyse des arguments, mais vous ne voulez probablement pas lire les sources pour le découvrir.
Vous ne pouvez vraiment pas déduire la syntaxe d'argument d'un programme de celle d'un autre.
Si vous considérez également Windows, la situation empire: alors que les appels de ligne de commande Windows utilisent traditionnellement /f
(du moins la plupart du temps, des caractères simples) des options, avec :
comme séparateur les options et leur valeur (voir par exemple ici ); Les utilitaires multiplates-formes sont répandus (tels que ceux que vous avez mentionnés) et apportent la syntaxe de trait d'union plus courante pour les arguments, avec toutes les incohérences mentionnées ci-dessus.
-i
vs--input
ou-n
--dry-run
.