在 Linux 的 shell 中,我们把「-」和「--」加上一个字符(字符串)叫做命令行参数,主要有以下几种风格:

  • Unix 风格参数,前面加单减号「-」;
  • BSD 风格参数,前面不加减号;
  • GNU (GNU is Not Unix)风格参数,前面加双减号「--」。

Unix 风格参数

一个减号「-」,然后一个参数就是一个字母。Unix风格的参数是从贝尔实验室开发的AT&T Unix系统上原有的命令继承下来的。比如:

ps -A
ls -l
rm -fr /
git commit -am "xxx"

那么,为什么有的「-」后面跟一个字母,有的跟两个字母呢?其实很简单,一个字母就是一个参数,两个字母就是两个参数。最后那个git -am其实是-a -m两个参数。一般你可以分开写,也可以合起来写

GNU 风格参数

两个减号「--」加参数,一般后边的参数是跟上一个单词或短语。比如:

npm install lodash --save
npm install express --save-dev
tsc --init
ps --no-headers

咦?为什么有些双减号「--」和单减号「-」混合了?其实在这种模式中,双减号「--」后面就是一个参数,单减号「-」在这里就是一个连字符的作用,就是为了把两个单词隔开,为了美观。为啥不用空格隔开呢,道理大家都懂得。其实「--」后面仍然是一个参数。比如no-headers的意思就是不显示header,这是一个参数。

你也可以理解为「--」后面的单词是单减号「-」字母的全称。比如ls -a和ls --all意思是一样的。-h往往对应--help。-v(-V)对应--version。但是也有一些非主流的例外。

第三种BSD式目前用的不多,此处便不赘述。

参考文献