82 votes

Quelle est la différence entre un tiret et deux tirets pour les paramètres de l'invite de commande ?

Je me demandais pourquoi certains programmes exigent que leurs paramètres d'invite de commande aient deux tirets devant alors que d'autres (la plupart) n'exigent qu'un seul tableau de bord devant ?

Par exemple, la plupart des programmes ressemblent à ceci : relaxer -dtd toc.xml toc_gr.xml toc_jp.xml

Alors que certains programmes ressemblent à ça : xmllint --valid toc.xml --noout

Quelle est la raison pour laquelle certains exigent deux tirets au lieu d'un ? N'est-il pas logique que tout le monde s'en tienne à un seul standard (c'est-à-dire qu'un seul tiret suffit).

39voto

Daniel Beck Points 105590

Il n'existe pas de norme généralisée. Il y a une certaine cohérence, par exemple dans les programmes GNU, mais vous devez vérifier la documentation de chaque programme.

Citation : Wikipedia C'est moi qui souligne :

Dans les systèmes de type Unix, le trait d'union ASCII-minus est couramment utilisé pour spécifier des options. Ce caractère est généralement suivi d'une ou plusieurs lettres . Un argument qui est un simple trait d'union sans aucune lettre spécifie généralement qu'un programme doit traiter 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 dans certains programmes pour spécifier des "options longues" où des noms d'options plus descriptifs sont utilisés. . C'est une caractéristique commune des logiciels GNU.

Habituellement, les traits d'union indiquent un argument prédéfini. Je pense qu'il est utilisé pour 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 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 (GNU find me vient à l'esprit). Certains programmes proposent des traits d'union facultatifs ou ne les utilisent pas du tout ( tar ou BSD ps me viennent à l'esprit).

Parfois, les options longues ( --foo ) nécessitent des arguments, tandis que les options courtes ( -f ) ne le font pas (ou du moins impliquent un argument par défaut spécifique).

Options courtes (par exemple cut -d ' ' ) peuvent avoir des arguments , tandis que les options longues (par exemple, l'option 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.

Par ailleurs, certains programmes peuvent gérer pas d'espace entre une option et son argument alors que d'autres ne le peuvent pas.

Comme je l'ai écrit au début, il n'y a tout simplement pas de comportement commun ou de norme. Souvent, vous pouvez retrouver la trace d'un comportement similaire dans la même bibliothèque utilisée pour l'analyse des arguments, mais vous n'avez probablement pas envie de lire les sources pour le découvrir.

Vous ne pouvez vraiment pas déduire la syntaxe des arguments d'un programme de celle d'un autre.


Si l'on considère également Windows, la situation est encore pire : alors que les appels de la ligne de commande de Windows utilisent traditionnellement /f (au moins la plupart du temps, des caractères uniques) pour les options, avec : comme séparateur entre les options et leur valeur (voir par exemple aquí ) ; les utilitaires multiplateformes sont très répandus (comme ceux que vous mentionnez) et apportent la syntaxe plus courante du trait d'union pour les arguments, avec toutes les incohérences mentionnées ci-dessus.

25voto

barlop Points 21549

Fais-le. ls --help et regarder les options et alors ce sera plus clair.

Cela n'a rien à voir avec les paramètres du tout. De nombreuses options ont une forme courte et une forme longue, et beaucoup ont l'une et pas l'autre.

Et aussi, concernant les paramètres, c'est simplement que dans le formulaire long, lorsqu'ils prennent un paramètre, il semble que ce soit toujours avec un égal. Mais évidemment, les formulaires courts peuvent prendre des paramètres tout autant, mais ils n'utilisent pas d'égal.

Voici un extrait de ls --help ( man ls donne des informations équivalentes). Remarquez que certains ont une forme longue sans forme courte ( --author , --block-size ), certains ont une forme courte sans forme longue ( -c , -f , -g ), et certaines 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'

11voto

Rook Points 23039

Il s'agit d'une convention provenant de *nix. Le double trait d'union précède les options lorsqu'elles sont écrites en entier , , tandis que le tiret simple précède les options lorsqu'elles sont écrites en bref . Par exemple ls --all --l peut être raccourci en ls -al . Comme on peut le constater, toutes les options n'ont pas leur équivalent en lettres simples, bien que les plus utilisées en aient généralement un.

Le fait 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 façon dont vous saisissez l'option.

Lorsque vous les écrivez pour un usage unique, cela n'a pas vraiment d'importance, mais lorsque vous écrivez des commandes, par exemple dans des fichiers .alias, il est d'usage d'utiliser la forme complète. Tout simplement pour faciliter la lecture par la personne suivante.

4voto

hookenz Points 3983

Le tiret unique est mis en œuvre par le getopt et est une fonction standard de posix, double tiret en getopt_long et est un standard gnu.

Traditionnellement, un simple tiret fournit une option à un seul caractère, comme ceci :

-A ou -V etc mais ne doit pas être limité à cela. par exemple, -Wall pour gcc active tous les avertissements de compilation pour la commande de compilation gcc.

Les arguments à double tiret ont tendance à être plus verbeux et prennent souvent un paramètre fourni comme --max-count=NUM. Cependant, --version ne prend pas d'égaux.

D'une manière générale, il n'y a pas de règles ou de normes définies sur la façon dont les arguments des programmes doivent être spécifiés, juste un tas de traditions. Cependant, si les fonctions d'analyse de la ligne de commande getopt et getopt_long sont utilisées, les paramètres devraient généralement suivre la norme, car les fonctions de la bibliothèque imposent une certaine façon de faire.

3voto

Ce sont des syntaxes UNIX conventionnelles,

un argument de programme prend un trait d'union ("-") suivi d'une seule lettre lorsqu'il s'agit d'une simple option (par ex : -v ) et deux tirets ("--") lorsque l'option prend des arguments (ex : --file toc.xml o --file=toc.xml )

aucun impact sur la fonctionnalité du programme.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X