Quelle est la différence entre un indicateur, une option et un argument? [fermé]

14
  • ls -a(Je considère -aune option)

  • sudo -u username( -u= option, username= arg)

  • chmod 664 my-dir( 664= option, my-dir= arg)

Je ne peux pas penser à un exemple qui pourrait dire "ceci est un drapeau" sauf peut-être en regardant la liste des dir:

-r--------. 1 david david   3344 May 19 17:48 611056.pdf

Le "drapeau de lecture" est défini pour le propriétaire, mais c'est tout. Qu'est-ce qui m'empêche d'appeler cela une "option de lecture"?

J'écris et édite de la documentation technique, principalement en DocBook XML, et je cherche une explication de la différence, aussi cohérente et précise que possible. Cependant, je vois déjà un motif se former:

  1. les drapeaux ont tendance à être booléens. par exemple,setenforce 0
  2. les options aident à définir le comportement d'une commande. Certains peuvent être facultatifs.
  3. Les arguments indiquent aux commandes sur quel objet opérer.

Je pouvais me voir combiner des indicateurs et des options (certaines options peuvent avoir une douzaine de valeurs possibles, mais les booléens n'en ont que deux). Les arguments semblent suffisamment différents pour les maintenir tels quels.

JohnDoea
la source
2
"Qu'est-ce qui m'empêche d'appeler ..."? Oo Rien. Tout comme rien ne m'empêche d'appeler un chat un arbre.
muru
@muru - bien qu'un dictionnaire anglais soit en désaccord avec votre affirmation.
DarkHeart
3
Pour rendre les choses plus confuses, j'appellerais également une option qui ne prend pas un paramètre / argument un indicateur, comme dans votre ls -aexemple. (Pour moi, un drapeau est une variable booléenne.)
Ulrich Schwarz
3
Ce sont des chenils ; tous les trente d'entre eux. :-) ⁠
Scott
Le motif que vous voyez n'est là que parce que vous affinez les choses que vous voulez voir. Une façon de créer un fichier TAR (que j'utilise depuis plus de 30 ans) et non par exemple de l'extraire est:, il tar c abc.txt > x.tary a cune fonction . Vous essayez d'appeler cela une option et c'est complètement inapproprié.
Anthon

Réponses:

17

Il n'y a pas de définitions cohérentes des termes "option", "argument" et "indicateur", et il n'y a aucune autorité centrale dans le monde du développement logiciel qui pourrait imposer leur utilisation. Cela se produit avec beaucoup de terminologie: après plus de 30 ans d'utilisation du mot «répertoire», je dois maintenant traiter avec des personnes utilisant le mot «dossier» qui ont été confondues par le nouveau langage de Microsoft.

Il existe différentes manières de parvenir à des définitions consensuelles des termes dans la programmation. Dans le cas de "argument" / "option" / "flag", les manuels canoniques et les tutoriels pour les langages de programmation ont aidé à imposer l'utilisation, tout comme les termes utilisés dans les bibliothèques communes.

Par exemple, les choses que vous mettez sur la ligne de commande après une commande sont souvent appelées "arguments" à la commande, par analogie avec les arguments d'un appel de fonction , et c'est probablement en partie parce qu'elles sont appelées "arguments" dans le manuel C ( d'où argcet argv). La argparsebibliothèque Python aide également à appliquer le terme "argument". Cependant, je les ai également vus être appelés "paramètres".

Le terme "option" est dérivé de "facultatif", ce qui implique qu'ils peuvent être omis. La getoptbibliothèque C est une utilisation de ce terme. Mais il existe un précédent pour les "options" qui ne sont pas réellement facultatives: par exemple, le argparse manuel indique que l'on peut créer une "option requise" (bien qu'il indique également que cela est "généralement considéré comme une mauvaise forme"). Les options sont souvent précédées d'un ( -) ou double ( --, longue option) tableau de bord, mais il y a des commandes bien connues qui ne nécessitent pas ou à faire exécuter l' utilisation du tableau de bord pour les options (par exemple tar, pset dd). Une option peut elle - même prendre un argument (par exemple, -w80et --color=always), ou parfois plusieurs arguments.

"Les drapeaux" sont, selon mon expérience, les mêmes que les options, mais ne prennent généralement pas d'arguments eux-mêmes et représentent essentiellement des commutateurs booléens marche-arrêt.

Sur une note plus large, puisque chaque programmeur a la possibilité d'essayer de rechercher une façon standard de faire les choses et de nommer les choses, mais peut également réinventer la roue sans trop de frais supplémentaires, la dénomination ne sera jamais cohérente. Et une fois que vous avez documenté votre code, et il est clair quelle nouvelle signification vous avez donnée à ces mots en donnant des exemples, ces noms et ces significations pourraient bien rester s'il y a suffisamment de personnes qui les prennent dans votre code.

Anthon
la source
7

Un indicateur est un type d'option, une option de type booléen, et est toujours faux par défaut (par exemple --verbose, --quiet, --all, --long, etc.).

Une option indique à la fonction comment agir (par exemple -a, -l, --verbose, --output, -name, -c, etc.), avec un argument qui indique à la fonction sur quoi agir / à partir de (par exemple *, file1, nom d'hôte, base de données).

Ziggy Crueltyfree Zeitgeister
la source
Donc, dans votre définition, dans git pull git://bla/bla, pullc'est un argument qui indique sur gitquoi travailler.
Anthon
1
@Anthon non, il y a des opérateurs (commutateurs / drapeaux / paramètres), des arguments et des commandes . pullest une commande. On peut considérer les commandes comme des extensions du nom de l'application: git pull <...> est équivalent à une application appelée git-pull. Lorsque l'application a des commandes, chaque commande oblige l'application à faire quelque chose de complètement différent.
Ziggy Crueltyfree Zeitgeister
Les gens de git peuvent l'appeler une commande, mais ce n'est pas toujours ce qu'on appelle par exemple tar, utiliser cpour créer s'appelle une fonction . Et c'est exactement le problème: il n'y a pas de standardisation des termes, même s'il semble que vous pensez qu'il y en a de votre réponse
Anthon
un indicateur n'a pas besoin d'être faux par défaut. fournir l'indicateur sur la ligne de commande inverse simplement son état par défaut (on -> off, ou off -> on). certaines personnes appellent cela une bascule pour le distinguer d'un drapeau. d'autres pensent que la distinction est sans importance.
cas