如何区分命令行下的arguments、flags、options?
开发命令行程序,经常能够遇到arguments
、flags
、options
这三个词。如果是宽泛地说,可以把三者等价看待。那如果是想严格区分,它们之间到底有什么区别呢?
arguments
: 自认为这还比较好理解,如果拿curl -X GET https://github.com
来说,https://github.com
就是argument
。
那么,flags
和options
指什么?我几乎无法区分两者。在我眼里-X GET
就是flags
或者options
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
命令行工具是基于 cli 的交互模式.
换句话说,命令行就是将复杂的功能利用文本描述进行抽象.
假设我们利用函数来抽象这个文本描述.那么重点来了,函数有哪一些核心特性?
函数名
等价于命令名形参名
等价于 options传入的实参
等价于 arguments那么假设 options 不需要传值,是不是只需要利用
flags
这样的字段作为某一功能的使能标志位就好了所以我们会看到
flags
有时也叫options
重点是认识到,命令行只是为了实现某种功能的文本描述.
而为了减少在终端交互模式下的输入成本和开发的规范性,衍化出了这些概念.
我在编写工具时,也没有查到 cli 工具的标准规范等.如果有查到的不吝赐教!
最后如果你要开发命令行工具可以使用 commander.js
以下是我自己开发中觉得有用的资料
Building command line tools with Node.js
Command-line utilities with Node.js
首先感谢你的问题,为此我也搜了一番。
我觉得你的问题肯定是在 flag 和 option 的区别,arguments 很明显的,对吧。
我搜了一下,这个答案比较权威些,供参考:
来自:https://www.cs.bu.edu/teachin...
flag 和 option 都叫 option,flag 更侧重开关型的 arguments;options 如其名称所描述,是可选的,你拿 ls -al 来说,-a 和 -l 都是“可选的”,就像多选框打勾一样,你可以都打勾,也可以打想打的。
flag 个人感觉更多的用于代码里,用于 bool 型变量名称更常见。
host 和 port 即为 flags
run get 即为 args
可以看下 golang flags包:
这个文章就够了:
https://studygolang.com/artic...