在shell命令中使用连字符

我不好意思问这个问题,但是如果我不这样做,我永远也不会知道,所以我在这里给出一个答案:

我注意到大多数shell命令使用“ – ”作为选项,但我也注意到一些命令没有它。 例如,要在给定的直接存档文件,命令是:

tar czvf allmyfiles.tar.gz * 

但是,为了提取档案,我学到的命令是:

 tar -zxvf allmyfiles.tar.gz 

看上面两个例子,是否包含连字符有什么意义?

命令'tar'和'ar'是非常非常古老的,并使用破折号来约定约定。

大多数现代程序使用getopt来parsing它们的参数:

原始作者select了单个字符选项的变体支持,一起指定了多个选项,以及带有参数的选项(-a arg或-aarg),所有选项string均可控制。

但是和往常一样,有些程序以自己的方式做事( dd是一个很好的例子)。

更新 :BSD程序倾向于使用不带连字符的选项 – 例如, ps的联机帮助页面状态:

这个版本的ps接受几种select:

  1. UNIX选项,可以分组,并且必须以破折号开头。
  2. BSD选项,可以分组,不能用短划线。
  3. GNU long选项,前面是两个破折号。

tar ,通常是没有区别的。 没有规则可以说所有的命令是否遵循这个约定,但是一般的指导是command -arguments