为什么我们在“tar --anchored”中使用双连字符,在“tar -b”中使用单连字符?

为什么我们在“tar --anchored”中使用双连字符,在“tar -b”中使用单连字符?

为什么我们在 中使用双连字符tar --anchored而在 中使用单连字符tar -b

我的意思是说为什么有些命令行选项有单连字符 (-),而另一些则有双连字符 (--)?

还有一个git例子:

git commit --amend
git commit -a

答案1

传统上,长选项(超过一个字母)用两个破折号书写,短选项(一个字母)用一个破折号书写。然而,并非所有程序都尊重这一点。

我能找到的最古老的参考资料之一是:http://www.gnu.org/fun/jokes/long-options.html

答案2

这是一个约定:

  • 一破折号代表一(或许多) 缩写参数:

    command -abc
    
  • 用于单个未缩写参数的双精度数:

    command --alice --barry --catherine
    

值得注意的是,这只是一个约定。任何命令都可以采用任何样式的任何参数(前提是它们从 shell 中转义),无论破折号如何。如果我们这里的示例command被编程为接受它们,则以下内容可以是上述示例的有效同义词:

command abc
command alice barry catherine

这些可能是可怕的例子,但我试图理解的是,这是一种将参数作为非位置参数处理的方法的约定。有些东西不想要。有些东西只使用单个破折号。有些东西使用破折号以外的字符(我见过交叉编译的 Windows 应用程序仍在使用/)...这确实没有那么大的区别。

答案3

正如其他人已经说过的,这是 GNU 项目发起的一项约定,使用单个减号表示缩写,这意味着一个字母长的选项,使用双减号表示长选项,这意味着比一个字母长的选项。这个约定已经很完善,并被 GNU 之外的许多项目所使用,但是当它被引入时,它让一些习惯于只使用短选项的人感到困惑。然而,还有更多内容:

  • 一些程序,例如git允许在长选项的第一个字母之前使用单个减号。在这种情况下,此选项将扩展为以此字母开头的长选项,就像提供了两个减号和完整的选项名称一样。例如:

$ git pull -r

相当于:

$ git pull --rebase

  • 一些程序,例如 GNU日期与 git 类似,但仅展开部分长名称选项(如果它们前面有两个减号):

$ date --s

相当于:

$ date --set

  • 一些程序,例如杂种狗或者git允许在选项之后和值之前省略空格:

$ mutt -f/var/mail/user

相当于:

$ mutt -f /var/mail/user

  • 一些程序,例如 GUNR M允许对单个选项进行分组。例如:

$ rm -rv dir

相当于:

$ rm -r -v dir

  • 一些采用带有参数的选项的程序使用空双减选项来标记选项的结尾。例如,如果您想使用触碰命令创建一个以减号开头的文件,您必须这样做:

$ touch -- -file

这完全取决于特定软件如何解析其选项。

另请注意"-"您所指的标志连字符被称为对于大多数 Unix 用户来说,主要是因为有些程序采用以加号开头的选项(X例如)。看这里

答案4

rmdir --ignore-fail-on-non-empty {directory} ...

双破折号 (--) 位于整个单词之前,否则只需使用开头带有一个破折号的单个字母 (-)。

查看其他手册,例如rmdir手动的,它显示了您可以使用的选项表:

-p
--ignore-fail-on-non-empty
-f, --force
-r, -R, --recursive
-v, --verbose

相关内容