D'où est venue la convention d'utiliser des tirets simples pour les lettres et des tirets doubles pour les mots et pourquoi continuer à être utilisé?
Par exemple, si je tape ls --help
, vous voyez:
-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 ~
...
J'ai essayé de googler - and -- convention
même avec des citations avec peu de succès.
command-line
history
options
Larry
la source
la source
-
s'appelle techniquement un trait d'union . Nous utilisons le mot "tiret" pour désigner le tiret em (-) dans la plupart des cas, et parfois le tiret en (()), mais ni l'un ni l'autre n'est un trait d'union (-).java -version
find . -delete
-ab
ce qui activea
etb
. Sans le double tiret,-help
activerait lesh
,e
,l
etp
options.Réponses:
Dans l'art de la programmation Unix, Eric Steven Raymond décrit comment cette pratique a évolué:
[1] http://www.faqs.org/docs/artu/ch10s05.html
la source
Une des raisons pour continuer à utiliser les options à une seule lettre est qu’elles peuvent être combinées:
ls -ltr
c’est beaucoup plus facile à taper quels --sort=time --reverse --format=long
. Il existe un certain nombre de fois où les deux sont bons à utiliser. Pour ce qui est de rechercher ce sujet, essayez "convention des options de ligne de commande unix".la source
ls --sort=time --reverse --format=long
ce n’est pas une bonne idée de mentionner cette méthode non standard.La citation de Raymond par @jasonwryan contient des informations utiles, mais commence au milieu de l'histoire:
'-'
caractère d'option a été utilisé dans Multics. Bitsavers a un manuel pour ses commandes utilisateur .'/'
utilisés pour TOPS et VMS) et d'autres moins (comme ceux'('
utilisés dans les CMS VM / SP).-print
vs-pr
(page 3-8).getopt
été introduites. Comme il ne faisait pas partie de l’Unix original, il existe des utilitaires qui n’ont pas été utilisésgetopt
et qui sont restés tels quels . Mais avoirgetopt
aidé à rendre les programmes cohérents.D'autre part, les options Unix utilisées
getopt
étaient à caractère unique. D'autres systèmes, en particulier les plus grands, ont utilisé des mots-clés. Certains (pas tous) ont autorisé l’ abréviation de ces mots-clés , c’est-à-dire que tous les caractères n'étaient pas fournis tant que l’option était sans ambiguïté. Ce test de l'ambiguïté présente des pièges. Par exemple:sta
, pensant obtenirstatus
. C'était l'abréviation destart
, et n'ayant rien donné à commencer , l'interprète de commande m'a déconnecté.-v
(pour la version) par rapport à-vb
(cloche visuelle). X Toolkit n’a aucun moyen direct de spécifier une option préférée en cas d’ambiguïté.En raison de ce risque d'ambiguïté, certains développeurs préfèrent ne pas autoriser les abréviations. Lynx , par exemple, utilise des options multi-caractères sans autoriser les abréviations.
Tous les programmes ne sont pas utilisés
getopt
:tar
etps
ne l'ont pas été. Nircs
(ousccs
) non plus, comme vous pouvez le constater en notant où le tiret était facultatif et les valeurs d’option facultatives.Tenant compte de tout cela, les développeurs GNU ont adapté les options de mot-clé utilisées dans d’autres systèmes en
getopt
offrant une version longue de chaque option courte. Par exemple, textutils 1.0 changelog ditLe changement de fileutils était plus tôt:
et quelqu'un peut en trouver un encore plus tôt, mais il semble que l'en-tête de fichier indique la date la plus proche:
qui est (par exemple) concurrente de X Toolkit (1987). La plupart des utilitaires Unix avec lesquels vous êtes habitués (tels que
ls
,ps
) ont utilisé les options existantes à un caractère qui nécessitent des visites périodiques du manuel. Lors de l’introductiongetopt_long
, les développeurs GNU ne l’avaient pas fait en ajoutant d’ abord de nouvelles options; ils ont commencé par tabuler les options existantes et en fournissant une option longue correspondante.Parce qu'ils ajoutaient à un répertoire existant, il y avait (encore une fois) le problème du conflit avec les options existantes. Pour éviter cela, ils ont modifié la syntaxe en utilisant deux tirets avant les options longues.
Ces programmes continuent à être utilisés
getopt_long
de cette manière pour les raisons habituelles:la source
Dans l' interface de ligne de commande wikipedia , il est indiqué:
la source
Je suppose que plus d'options descriptives étaient souhaitées et qu'avec les options plus longues, vous n'aurez plus à vous soucier de manquer d'options à un seul personnage.
Une fois que vous avez décidé de vouloir des options longues, vous avez un problème, du moins si vous prévoyez de prendre en charge les options longues et courtes. Je ne suis pas positif, mais je pense que la réponse d’Arcege est la clé de la raison - et -. Une routine de traitement générique, par exemple. getopt_long (), aurait besoin de savoir si un seul argument en ligne de commande peut contenir plusieurs options, par exemple. -ltr. Ainsi, une routine de traitement devrait être capable de différencier les deux. Si je lis un seul tiret, -, le reste de l'argument de la ligne de commande peut correspondre à plusieurs options. Si je lis un double tiret, -, le reste de l'argument de la ligne de commande doit correspondre à une seule option.
Récemment, j'ai utilisé getopt_long () et je commence à aimer les longues options car elles sont plus faciles à mémoriser et à documenter. Si j'ai les deux commandes suivantes:
./aggregator -f 15
./aggregator --flush-time 15
Je dirais que le second en utilisant l'option longue est plus explicite.
la source
Il y a probablement plusieurs raisons pour lesquelles les deux méthodes sont utilisées. La première est, bien sûr, la tradition. Les programmeurs et les utilisateurs sont des humains, et les humains s'attendent à ce que les choses fonctionnent d'une certaine manière. S'il n'y a aucune raison de changer (et vraiment, pour une ligne de commande, il n'y a pas beaucoup de raison de changer), alors ne le faites pas.
Cela étant dit, je sais qu'il existe des outils qui utilisent le trait d'union comme option longue ou même suppriment les traits d'union. Ces outils peuvent être difficiles au début et ont tendance à rester visibles dans un système autrement unifié.
Quand j’apprenais la différence entre les deux (et avant que cela devienne une seconde nature), je me souvenais toujours que le trait d’union "court" correspond aux options "court", tandis que le trait d'union "long" (ou double) correspond au "long" Les options. Je ne sais pas si ce raisonnement a été utilisé dans le développement du style à double trait d'union, mais c'est une possibilité.
la source