我是在shell中工作的新手,这些命令的用法似乎是任意的。一个标志有一个破折号而另一个标志可能有双破折号是有原因的吗?

评论

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

更好的链接:en.wikipedia.org/wiki/…

#1 楼

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

请考虑以下示例: :-czfcz

现在再考虑一个示例:双连字符消除了命令行参数的歧义,确保f将其解释为--exclude,而不是excludetarexcludeexcl的组合。

评论


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

–psusi
2012年5月10日14:37

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

– mulaz
2012年5月10日14:42

@mulaz,是的,cdrecord做了很多愚蠢的事情。

–psusi
2012年5月10日14:46

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

– Sirex
2012年5月10日19:51

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

–psusi
18年4月2日在15:25

#2 楼

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

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


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




评论


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

– Killjoy
18 Mar 30 '18 at 14:48

#3 楼

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

很好,因为我们可以将多个简短选项组合起来,就像其他答案所说的,例如tar -xzf myfile.tar.gz。输入ls的含义可能与ls -lisa的含义不同。前者是ls --lisalis参数,而不是单词。实际上,您可以编写a,其含义与ls -l -i -s -a完全相同,但这取决于程序。 br />
还有一些程序不遵守该约定。在我看来,最值得注意的是ls -lisadd

#4 楼


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


短选项可以组合为单个参数;

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


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