关键字母?选项字母?这些是什么东西?

关键字母?选项字母?这些是什么东西?

一些 GNU 和类似 GNU 的工具似乎以组合方式接受选项,例如,foo -hgcf而不是foo -h -g -c -f.

一个例子是焦油,如tar cXbf keepout 20 archive.shar *.txt代替tar -c -b 20 -X keepout -f archive.tar *.txt

我的印象是这种指定参数的“压缩”或“简短”风格有一个名称。有谁知道它叫什么,我如何了解更多信息,以及如何查明工具是否支持它?

答案1

在传统的 Unix 中,选项是一个字母,例如ls -lls -d。在某些情况下,该选项将接受一个参数,如cut -d: -f1 /etc/passwd-d(分隔符)和值:-f(要选择的字段)和值1)。如果选项不带参数,ls -l -d -F /tmp/*您可以编写ls -ldF /tmp/*.有些命令采用以 开头的选项+,例如从 的第 10 行more +10 file开始。more(1)file

我相信是 87 年左右的 GNU 项目引入了长选项的想法,就像cut --delimiter=: --fields=1 /etc/passwd上面 GNU 的cut.这提供了更多可读选项,并且可以解决以下问题仅有的ls(1)62 个字母和数字,对于例如……这样的选择太少了gcc -c -O2 --fomit-frame-pointer xxx.c

一些异端命令使用以 开头的长选项-,例如convert -adjoin -authenticate passwd some.jpg graphic.gif files.png -o here.pdf(来自图像魔术师,将-adjoin图像放在一起,-authenticate需要密码;这只是从手册页的选项列表中拼凑在一起的,这种组合可能没有意义)。

许多命令(但不是全部,这取决于你的毒药是什么 Unix 风格)意味着--“以下不再是选项,即使它看起来像选项”,因此使用 GNU 的rm(1)你可以摆脱-rf通常创建为的文件一个愚蠢的恶作剧rm -- -rf

答案2

在 C 中参见getopt_longbash寻找getopts

相关内容