Confusion quant à la modification du sens des arguments et des options, existe-t-il une définition officielle officielle?

11

Je suis tombé sur une variation déroutante dans la compréhension des options et des arguments concernant la syntaxe des commandes.

Par exemple, j'ai rencontré des définitions comme:

  • command -a -b -c d e f

    certains diffèrent entre -a -b -c, appelez-les options ou commutateurs et d e fen les appelant arguments.

  • command -a -b -c d e f

    certains, par exemple un bashmanuel, appellent tous les -a -b -c d e farguments et expliquent que tous sont accessibles à partir d'un script par $1 $2 $3 $4 $5 $6respectivement.

  • command -a b=c

    certains appellent -aune option, bun argument et cla valeur, mais d'autres les mélangent comme dans les deux premiers points, dans une variété appelant tous les -a b carguments.

Ces trois versions ne sont que des exemples pour une pléthore de différentes variétés d'appels, je ne sais même pas comment les énumérer toutes, mais j'ai remarqué qu'il n'y a pas de convention de nommage fixe.

Ou du moins, je ne connais pas de convention de dénomination normalisée, car j'ai rencontré différentes sources aléatoires, mais même parmi les sites ou manuels officiels affiliés à Linux et GNU, j'ai pu rencontrer cette incohérence.

Existe-t-il un schéma de dénomination officiel incontestable auquel je peux me référer?

sharkant
la source
Le deuxième formulaire est 100% correct de son propre point de vue. Le contexte est très important.
Oskar Skog

Réponses:

18

Adapté de la section "Utility Argument Syntax" de la norme POSIX :

utility_name [-a] [-b] [-c option_argument]
             [-d|-e] [-f[option_argument]] [operand...]

L'utilitaire de l'exemple est nommé utility_name. Il est suivi par les options , les arguments d'option et les opérandes .

Les arguments qui se composent de -caractères et de lettres ou de chiffres simples, tels que a, sont connus sous le nom d' options (ou, historiquement, de drapeaux ). Certaines options sont suivies d'un argument d'option , comme illustré avec [-c option_argument]. Les arguments suivant les dernières options et options-arguments sont appelés opérandes .

La norme définit également "l'argument" comme

Dans le langage de commande shell, un paramètre transmis à un utilitaire comme l'équivalent d'une seule chaîne dans le argvtableau créé par l'une des execfonctions. Un argument est l'une des options, des arguments d'option ou des opérandes suivant le nom de la commande.


Toutes les choses après la utility_nameligne de commande sont les arguments de l'utilitaire , et ils apparaissent tous dans les paramètres de position s'il s'agit d'un script shell. Les termes option, option-argument et opérande sont des noms plus spécifiques pour ces arguments sur la ligne de commande.

"Flag" et "switch" sont des synonymes courants de "option".

Dans le cas de

utility -a b=c
  • -aet b=csont des arguments,
  • -aest une option si l'utilitaire la reconnaît comme telle (l' lnutilitaire n'a pas d' -xoption, donc -xn'est pas une option à lnproprement parler et ln -xdéclencherait un message de diagnostic),
  • b=cest un argument-option si l' -aoption prend un argument, sinon c'est un opérande,
  • bet nec sont pas des options, des arguments d’option et non des opérandes en eux-mêmes.

Comme vous le constatez dans mon texte ci-dessus, travailler à partir du synopsis d'un utilitaire (comme indiqué dans le manuel de l'utilitaire) aurait été plus facile que d'essayer de décoder une commande générique tapée sur la ligne de commande. Le manuel indiquera clairement quelles options prennent les arguments d'option et quels arguments sont des opérandes, etc.

Appeler cune "valeur" est à mon humble avis parfaitement ok. Ce n'est pas quelque chose qui est standardisé, mais très peu de gens vous comprendraient mal si vous dites " cest la valeur donnée àb ". Cela ressortirait clairement du contexte de l'utilité en question.

Par exemple

$ awk -v var="d" '...' data.in

Quiconque est au courant awkdirait que cela -v var="d"signifie " la awkvariable varse voit attribuer la valeur dsur la ligne de commande ".

Kusalananda
la source