Il n'y a pas de norme généralisée. Il y a une certaine cohérence, par ex. dans les programmes GNU, mais vous devez vérifier la documentation de chaque programme.
Citant Wikipédia, c'est moi qui souligne :
Dans les systèmes de type Unix, le trait d'union ASCII moins est couramment utilisé pour spécifier des options. Le caractère est généralement suivi d'une ou plusieurs lettres . Un argument qui est un simple trait d'union moins sans aucune lettre spécifie 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 tiret–moins ( -- ) sont utilisés sur certains programmes pour spécifier des "options longues" là où des noms d'options plus descriptifs sont utilisés . C'est une caractéristique courante des logiciels GNU.
Habituellement, les traits d'union indiquent un argument prédéfini. Je pense qu'il est utilisé pour les différencier de par ex. les 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 longue, comme par ex. en 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 (GNU find
vient à l'esprit). Certains programmes ont des traits d'union facultatifs ou les ignorent complètement (tar
ou BSD ps
me viennent à l'esprit).
Options parfois longues (--foo
) nécessitent des arguments, tandis que les options courtes (-f
) ne le font pas (ou impliquent au moins un argument par défaut spécifique).
Options courtes (par exemple cut -d ' '
) peut avoir des arguments , tandis que des 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, tandis que 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 retracer un comportement similaire à la même bibliothèque utilisée pour l'analyse des arguments, mais vous ne voudrez probablement pas lire les sources pour le découvrir.
Vous ne pouvez vraiment pas déduire la syntaxe des arguments d'un programme à partir d'un autre.
Si vous considérez également Windows, c'est encore pire :alors que les appels de ligne de commande Windows utilisent traditionnellement /f
(au moins la plupart du temps, des caractères simples) pour les options, avec :
comme séparateur entre les options et leur valeur (voir par exemple ici); Les utilitaires multiplateformes sont répandus (comme ceux que vous mentionnez) et apportent la syntaxe de trait d'union la plus courante pour les arguments, avec toutes les incohérences mentionnées ci-dessus.
Faites simplement ls --help
et regardez les options; cela devrait être évident pour vous.
Cela n'a rien à voir avec les paramètres. De nombreuses options ont une forme courte et une forme longue, et beaucoup ont l'une et pas l'autre.
Et aussi, en ce qui concerne les paramètres, c'est simplement que dans la forme longue quand ils prennent un paramètre, on dirait qu'il est toujours avec un égal. Mais évidemment, les courts peuvent tout autant prendre des paramètres; juste qu'ils n'utilisent pas d'égal.
Voici un extrait de ls --help
(man ls
donne des informations équivalentes). Remarquez comment certains ont une forme longue sans forme courte (--author
, --block-size
), certains ont une forme courte sans forme longue (-c
, -f
, -g
), et certains ont à la fois une forme longue et une forme courte (-A
/--almost-all
, -b
/--escape
).
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author with -l, print the author of each file
-b, --escape print octal escapes for nongraphic characters
--block-size=SIZE use SIZE-byte blocks
-B, --ignore-backups do not list implied entries ending with ~
-c with -lt: sort by, and show, ctime (time of last
modification of file status information)
with -l: show ctime and sort by name
otherwise: sort by ctime
-C list entries by columns
--color[=WHEN] control whether color is used to distinguish file
types. WHEN may be `never', `always', or `auto'
C'est une convention provenant de *nix. Un double trait d'union précède les options lorsqu'elles sont écrites en toutes lettres , , tandis qu'un trait d'union simple précède les options lorsqu'elles sont écrites sous forme abrégée . Par exemple ls --all --l
, peut être raccourci en ls -al
. Comme on le voit, toutes les options n'ont pas leurs équivalents en une seule lettre, bien que les plus utilisées en aient généralement.
Que l'option prenne un argument ne fait pas vraiment de différence - elle peut soit les prendre, soit ne pas les prendre, quelle que soit la manière dont vous saisissez l'option.
Lorsque vous les écrivez pour une utilisation unique, cela n'a pas vraiment d'importance, mais lorsque vous écrivez des commandes, par exemple dans des fichiers .alias, il est habituel d'utiliser la forme complète. Purement pour la facilité de lecture pour la prochaine personne.