shell命令中的单个短划线和双短划线之间的区别是什么?

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

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

考虑这个例子:

tar -czf 

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

现在考虑另一个例子:

 tar --exclude 

在这种情况下,– exclude指定一个名为exclude的单个多字符选项。 双连字符消除了命令行参数的歧义,确保tar解释为exclude而不是exclude

这一切都取决于该计划。 通常“ – ”用于“短”选项(单字母-h),“ – ”用于“长”(er)选项(–help)。

短期期权通常可以合并(所以“-h -a”与“-ha”相同)

在类Unix系统中,ASCII连字符通常用于指定选项。 字符后面通常是一个或多个字母。 一个参数是一个单独的连字符 – 本身没有任何字母通常指定程序应该处理来自标准input的数据或发送数据到标准输出。 在某些程序中使用了两个连字符减号( – )来指定使用更多描述性选项名称的“长选项”。 这是GNU软件的一个常见function。

资源

这真是一个惯例。 但是,它可以帮助parsing器更高效地了解传递给程序的选项。 此外,还有一些简洁的工具可以帮助parsing这些命令,比如getopt(3)或者非标准的getopt_long(3)来帮助parsing一个程序的参数。

这是很好的,因为我们可以有多个短期选项组合,如其他答案说,像tar -xzf myfile.tar.gz

如果ls有一个“lisa”的说法,那么inputls -lisals --lisa有不同的含义。 前者是lisa参数,而不是单词。

实际上,你可以写ls -l -i -s -a ,和ls -lisa完全一样,但这取决于程序。

还有一些程序不遵守这个惯例。 最值得注意的是我的视线, ddgcc

单短划线与双短划线的长选项短期选项

简短的选项可以合并为一个参数;

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

如果我们允许单一短划线的长期select,它会导致模糊。 为了解决这个问题,我们使用双破折号的长选项。