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

30 linux options arguments

  • ls -a(我考虑-a一个选项)

  • sudo -u username( -u= 选项, username= arg)

  • chmod 664 my-dir( 664= 选项, my-dir= arg)

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

-r--------. 1 david david   3344 May 19 17:48 611056.pdf
Run Code Online (Sandbox Code Playgroud)

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

我主要使用 DocBook XML 编写和编辑技术文档,我正在寻找差异的解释,尽可能一致和准确。但是,我已经看到了一种模式的形成:

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

我可以看到自己组合了标志和选项(有些选项可能有十几个可能的值,但布尔值只有两个)。参数看起来足够不同以维持它们的原样。

Ant*_*hon 25

术语“选项”、“参数”和“标志”没有一致的定义,软件开发领域也没有可以强制使用它们的中央权威。这发生在很多术语中:在使用“目录”这个词 30 多年之后,我现在不得不处理那些使用“文件夹”这个词的人,他们被微软的新说法搞糊涂了。

术语的共识定义可以通过不同的方式在编程中出现。在“参数”/“选项”/“标志”的情况下,编程语言的规范手册和教程有助于强制使用,公共库中使用的术语也是如此。

例如,您在命令之后放在命令行上的内容通常称为命令的“参数”,类似于函数调用的参数,这可能部分是因为它们在 C 手册中被称为“参数”(因此argcargv)。在argparsePython库也有助于执行期限“的说法”。但是,我也看到它们被称为“参数”。

术语“选项”源自“可选”,这意味着它们可以被排除在外。在getoptC库是一个使用这一术语。但是对于实际上不是可选的“选项”有先例:例如,argparse 手册指出可以创建“必需选项”(尽管它也说这是“通常被认为是不好的形式”)。选项前面通常有一个单 ( -) 或双 ( --, 长选项) 破折号,但有一些众所周知的命令不需要或强制使用破折号来选择选项(例如tarps、 和dd)。一个选项本身可以接受一个参数(例如,-w80--color=always),或者偶尔有多个参数。

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

从更广泛的角度来看,由于每个程序员都可以选择尝试查找一些标准的做事方式和命名方式,但也可以在没有太多额外成本的情况下重新发明轮子,因此命名永远不会保持一致。一旦你记录了你的代码,并且很清楚你通过举例给这些词赋予了什么样的新含义,如果有足够多的人从你的代码中提取它们,这些名称和含义可能会保持不变。

  • “没有中央权威”——在Unix/Linux世界里,有Open Group的Posix标准。_参数_是命令行上的标记。第一个参数是_实用程序名称_。_Options_ 通常是可选的,用于修改实用程序的默认行为。它们通过前导“-”与其他参数区分开来。这 。选项可能有_选项参数_。其余参数是_操作数_。诚然,并非所有内容都严格遵循 Posix 术语,这通常是出于历史原因。_Flag_ 和 _switch_ 是布尔值选项的非正式术语。 (6认同)
  • 补充一点,我已经看到各种组织强制区分“参数”和“参数”,例如 https://developer.mozilla.org/en-US/docs/Glossary/Parameter传递给函数的变量。函数参数是传递给函数的真实值。” (2认同)

Eze*_*nay 16

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

一个选项告诉函数如何操作(例如 -a、-l、--verbose、--output、-name、-c 等),而参数则告诉函数要对什么进行操作(例如*,file1,主机名、数据库)。

  • git 的人可能会称其为命令,但这并不总是它的名称,例如“tar”,使用“c”创建被称为**函数**。这正是问题所在:术语没有标准化,即使看起来你认为你的答案是这样的 (3认同)
  • @Anthon 不,有运算符(开关/标志/参数)、参数和 _commands_。`pull` 是一个命令。可以将命令视为应用程序名称的扩展: git pull <...> 相当于一个名为“git-pull”的应用程序。当应用程序有命令时,每个命令都会使应用程序做一些完全不同的事情。 (2认同)
  • 默认情况下,标志不必为 false。在命令行上提供该标志只是反转其默认状态(开-->关,或关-->开)。有些人称其为“切换”,以区别于“标志”。其他人则认为区别并不重要。 (2认同)