命令行参数 -v -V --v 区别

近期研究命令比较多,对于命令参数的书写经常看见各种的写法,很好奇对错及规范是怎样。这里就了解到的总结下。

命令结构

首先先看一条命令的常见结构

cli_structure

针对上图还需补充几点

  1. 有些命令针对option参数是有长短两种格式的,碰巧图中的b没有对应长格式,但比如f就有-f--force。长短参数作用一致,仅仅是书写上的不同

  2. 多个短格式参数时,一般是可以合并在一起,但并非所有的参数都可以合并使用,比如git checkout -b newBranch -f就不可以合并写成git checkout -bf newBranch

  3. 命令行参数区分大小写,小写的参数很常见,但是不排除有大写的参数名

  4. 命令参数有时也是有值的,参数跟值的写法一般是2种,比如图中-b "newBranch",它们空格分割,有些比如docker,同时支持了空格和=两种,因此docker run -p 3001:3001 -d --name="doc-searcher" doc-searcher:v1又等价于docker run -p 3001:3001 -d --name "doc-searcher" doc-searcher:v1。具体是采用空格,还是=,又或者都支持,这就看具体的命令了

-v -V –v

了解了命令结构,那么再看这几个参写法也就容易理解了。

一般而言,-v即短格式参数,–v是长格式参数,-V还是短格式,只是参数设置成了大写

推荐规范

无规矩不成方圆,不同命令写法很不同,这带来了学习使用成本。如果我们自己写命令行工具时,推荐遵从相对大众点的标准。比如这里可以参考项目commander.js,通过它的文档可以了解到这样一套完整实践/规范

  1. 参数值采用空格方式
  2. 参数采用长短格式,短格式为单个字符,长格式为完整词汇
  3. 子命令/参数采用小写

写在最后

  1. 了解并遵循命令行参数的使用规范可以大大提高效率并避免不必要的错误。
  2. 建议还是遵从业界实践,好的命令行设计降低使用成本。