ls -a
(我考虑-a
一个选择)sudo -u username
(-u
= 选项,username
= 参数)chmod 664 my-dir
(664
= 选项,my-dir
= 参数)
我想不出一个可能会说“这是一个标志”的例子,除非在查看目录列表时:
-r--------. 1 david david 3344 May 19 17:48 611056.pdf
这为所有者设置了“读取标志”,但仅此而已。是什么阻止我称其为“阅读选项”?
我主要在 DocBook XML 中编写和编辑技术文档,并且我正在寻找差异的解释,该解释尽可能一致和准确。然而,我已经看到一种模式正在形成:
- 标志往往是布尔值。例如,
setenforce 0
- 选项帮助定义命令的行为方式。有些可能是可选的。
- 参数告诉命令要操作的对象。
我可以看到自己将标志和选项组合在一起(某些选项可能有十几个可能的值,但布尔值只有两个)。论点似乎完全不同,足以维持它们的原样。
答案1
术语“选项”、“参数”和“标志”没有一致的定义,并且软件开发世界中没有中央权威可以强制执行它们的使用。很多术语都会出现这种情况:在使用“目录”这个词 30 多年之后,我现在必须面对那些使用“文件夹”这个词的人,他们对微软的新说法感到困惑。
在编程中可以通过不同的方式达成术语的共识定义。就“参数”/“选项”/“标志”而言,编程语言的规范手册和教程有助于强制使用,就像公共库中使用的术语一样。
例如,您在命令之后放在命令行上的内容通常称为命令的“参数”,类似于函数调用的参数,这可能部分是因为它们在 C 手册中被称为“参数”(因此argc
和argv
)。 Pythonargparse
库还有助于强化术语“参数”。然而,我也看到它们被称为“参数”。
术语“选项”源自“可选”,这意味着它们可以被省略。 Cgetopt
库是该术语的一种用法。但“选项”实际上并不是可选的,这是有先例的:例如,argparse
手册指出可以创建“必需选项”(尽管它也说这是“通常被认为是不好的形式”)。选项前面通常有一个(-
)或双(--
,长选项)破折号,但有一些众所周知的命令不需要或强制选项使用破折号(例如,tar
,ps
和dd
)。一个选项可以本身采用一个参数(例如,-w80
和--color=always
),或偶尔采用多个参数。
根据我的经验,“标志”与选项相同,但通常本身不接受参数,并且本质上代表布尔开关。
从更广泛的角度来看,由于每个程序员都可以选择尝试查找一些标准的做事和命名方式,但也可以重新发明轮子而无需太多额外成本,因此命名永远不会保持一致。一旦你记录了你的代码,并且通过举例清楚地了解了这些单词的新含义,如果有足够多的人从你的代码中获取这些名称和含义,这些名称和含义可能会保留下来。
答案2
标志是一种选项,是布尔类型的选项,默认情况下始终为 false(例如 --verbose、--quiet、--all、--long 等)。
选项告诉功能如何执行操作(例如 -a、-l、--verbose、--output、-name、-c 等),同时参数告诉函数什么作用于/来自(例如*
,文件1、主机名、数据库)。