如何区分命令行下的arguments、flags、options?

开发命令行程序,经常能够遇到argumentsflagsoptions这三个词。如果是宽泛地说,可以把三者等价看待。那如果是想严格区分,它们之间到底有什么区别呢?

  • arguments: 自认为这还比较好理解,如果拿curl -X GET https://github.com来说,https://github.com就是argument

那么,flagsoptions指什么?我几乎无法区分两者。在我眼里-X GET就是flags或者options

阅读 8.1k
3 个回答

首先感谢你的问题,为此我也搜了一番。
我觉得你的问题肯定是在 flag 和 option 的区别,arguments 很明显的,对吧。

我搜了一下,这个答案比较权威些,供参考:
来自:https://www.cs.bu.edu/teachin...

Command Flag or Option or Switch
Command flags are typed at the prompt as part of a command. An example would be:
ls -l
in which case the flag -l (minus ell, not one) gives a longer set of information. Flags alter the default behavior of commands. For example, the command ls, by default, just lists the names of files. With the -l flag, it gives you more information about each file (or directory).

Flags normally start with a minus sign (-) and consist of a single letter, like l (i.e., ell) or a whole word, as in -debug. For commands that take only single letter flags, more than one flags can often, but not always, be combined. For example, -l and -F could be typed as -l<SPACE>-F or -lF. In some cases, flags will start with a plus sign (+) instead. It is more typically for flags with pluses to be part of a pair of flags, e.g., -a to turn some feature on and +a to turn it off.

Because some flags turn features on/off, flags are sometimes called switches. In addition, they may be called options.

flag 和 option 都叫 option,flag 更侧重开关型的 arguments;options 如其名称所描述,是可选的,你拿 ls -al 来说,-a 和 -l 都是“可选的”,就像多选框打勾一样,你可以都打勾,也可以打想打的。
flag 个人感觉更多的用于代码里,用于 bool 型变量名称更常见。

./yourcmdtool -host 127.0.0.1 -port 80 run get

host 和 port 即为 flags
run get 即为 args

可以看下 golang flags包:
这个文章就够了:
https://studygolang.com/artic...

命令行工具是基于 cli 的交互模式.
换句话说,命令行就是将复杂的功能利用文本描述进行抽象.
假设我们利用函数来抽象这个文本描述.那么重点来了,函数有哪一些核心特性?

  • 函数名 等价于命令名

  • 形参名 等价于 options

  • 传入的实参 等价于 arguments

那么假设 options 不需要传值,是不是只需要利用 flags 这样的字段作为某一功能的使能标志位就好了
所以我们会看到 flags 有时也叫 options

但是在任何时候,都不要把概念理解死

重点是认识到,命令行只是为了实现某种功能的文本描述.
而为了减少在终端交互模式下的输入成本和开发的规范性,衍化出了这些概念.
我在编写工具时,也没有查到 cli 工具的标准规范等.如果有查到的不吝赐教!

最后如果你要开发命令行工具可以使用 commander.js

以下是我自己开发中觉得有用的资料

Building command line tools with Node.js

Command-line utilities with Node.js

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏