标志、选项和参数之间有什么区别?

标志、选项和参数之间有什么区别?
  • ls -a(我考虑-a一个选择)

  • sudo -u username-u= 选项,username= 参数)

  • chmod 664 my-dir664= 选项,my-dir= 参数)

我想不出一个可能会说“这是一个标志”的例子,除非在查看目录列表时:

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

这为所有者设置了“读取标志”,但仅此而已。是什么阻止我称其为“阅读选项”?

我主要在 DocBook XML 中编写和编辑技术文档,并且我正在寻找差异的解释,该解释尽可能一致和准确。然而,我已经看到一种模式正在形成:

  1. 标志往往是布尔值。例如,setenforce 0
  2. 选项帮助定义命令的行为方式。有些可能是可选的。
  3. 参数告诉命令要操作的对象。

我可以看到自己将标志和选项组合在一起(某些选项可能有十几个可能的值,但布尔值只有两个)。论点似乎完全不同,足以维持它们的原样。

答案1

术语“选项”、“参数”和“标志”没有一致的定义,并且软件开发世界中没有中央权威可以强制执行它们的使用。很多术语都会出现这种情况:在使用“目录”这个词 30 多年之后,我现在必须面对那些使用“文件夹”这个词的人,他们对微软的新说法感到困惑。

在编程中可以通过不同的方式达成术语的共识定义。就“参数”/“选项”/“标志”而言,编程语言的规范手册和教程有助于强制使用,就像公共库中使用的术语一样。

例如,您在命令之后放在命令行上的内容通常称为命令的“参数”,类似于函数调用的参数,这可能部分是因为它们在 C 手册中被称为“参数”(因此argcargv)。 Pythonargparse库还有助于强化术语“参数”。然而,我也看到它们被称为“参数”。

术语“选项”源自“可选”,这意味着它们可以被省略。 Cgetopt库是该术语的一种用法。但“选项”实际上并不是可选的,这是有先例的:例如,argparse 手册指出可以创建“必需选项”(尽管它也说这是“通常被认为是不好的形式”)。选项前面通常有一个(-)或双(--,长选项)破折号,但有一些众所周知的命令不需要或强制选项使用破折号(例如,tarpsdd)。一个选项可以本身采用一个参数(例如,-w80--color=always),或偶尔采用多个参数。

根据我的经验,“标志”与选项相同,但通常本身不接受参数,并且本质上代表布尔开关。

从更广泛的角度来看,由于每个程序员都可以选择尝试查找一些标准的做事和命名方式,但也可以重新发明轮子而无需太多额外成本,因此命名永远不会保持一致。一旦你记录了你的代码,并且通过举例清楚地了解了这些单词的新含义,如果有足够多的人从你的代码中获取这些名称和含义,这些名称和含义可能会保留下来。

答案2

标志是一种选项,是布尔类型的选项,默认情况下始终为 false(例如 --verbose、--quiet、--all、--long 等)。

选项告诉功能如何执行操作(例如 -a、-l、--verbose、--output、-name、-c 等),同时参数告诉函数什么作用于/来自(例如*,文件1、主机名、数据库)。

相关内容