一些 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 -l
或ls -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_long
并bash
寻找getopts