shell命令中的单破折号和双破折号标志之间有什么区别?


70

我是刚开始使用Shell的人,这些命令的用法似乎是任意的。是否有一个原因一个标志有一个破折号而另一个标志可能有一个双破折号?



现在该链接为404 @cjc :(可能更可靠的链接为en.wikipedia.org/wiki/POSIX
Bernhard Hofmann

Answers:


110

单个连字符后可以跟多个单个字符标志。双连字符为单个多字符选项加上前缀。

考虑以下示例:

tar -czf

在这个例子中,-czf指定了三个单字符标志:cz,和f

现在考虑另一个示例:

tar --exclude

在这种情况下,请--exclude指定一个名为的单个多字符选项exclude。双连字符的歧义消除命令行参数,以确保tar将其解释为exclude而非的组合exclud,和e


1
@kylex,不,因为没有名为“ c”的长选项,并且-表示长选项,后面没有单个字符选项。
psusi 2012年

13
有时,即使是很长的命令也可以是单破折号。例如,“ cdrecord”使用所有单点划线命令(-eject -dao ...)。一切都取决于程序,但是其中大多数(!)使用-单个命令
长号

8
@mulaz,是的,cdrecord做了很多愚蠢的事情。
psusi 2012年

10
还请记住-单独使用通常表示选项已结束。看到这里了解更多信息:unix.stackexchange.com/questions/11376/…–
Sirex

3
@killjoy,因为无论是出于无知还是选择,这些程序的作者当然都没有遵循惯例。就像cdrecord几年前在上面的评论中提到的那样。
psusi '18

17

这完全取决于程序。通常,“-”用于“短”选项(一个字母,-h),“-”用于“长”(er)选项(-帮助)。

短选项通常可以组合使用(因此“ -h -a”与“ -ha”相同)

在类Unix系统中,ASCII连字符减号通常用于指定选项。该字符通常后跟一个或多个字母。一个单独的连字符减号(不带任何字母)的参数通常指定程序应处理来自标准输入的数据或将数据发送到标准输出。在某些程序上,使用两个连字符-减号(-)指定“长选项”,其中使用了更具描述性的选项名称。这是GNU软件的常见功能。

资源


2
那么,为什么它是java -version和ant -version呢?
killjoy18年

7

这确实是一个惯例。但是,它可以帮助解析器更有效地了解传递给程序的选项。此外,还有一些精巧的实用工具可以帮助解析这些命令,例如getopt(3)或非标准的实用工具可以帮助解析getopt_long(3)程序的参数。

很好,因为我们可以将多个简短选项组合在一起,就像其他答案所说的那样tar -xzf myfile.tar.gz

如果有一个“丽莎”的说法ls,有可能会具有不同的意义键入ls -lisals --lisa。前者是lis,和a参数,而不是这个词。

实际上,您可以编写ls -l -i -s -a,其含义与完全相同ls -lisa,但这取决于程序。

也有一些程序不遵守该约定。最显眼的是,ddgcc


3

单破折号的短选项与双破折号的长选项

短期权可以合并为一个参数;

for example: ls -lrt #instead of ls -l -r -t

如果我们允许长破折号带有单破折号,则会引起歧义。为了解决这个问题,我们对长选项使用双破折号。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.