Clo*_*boy 7 linux unix terminal macos
一些程序将采用如下选项:
$ someprogram -orange apple
Run Code Online (Sandbox Code Playgroud)
其他程序会使用这样的东西:
$ otherprogram --orange apple
Run Code Online (Sandbox Code Playgroud)
在 Linux/Unix/OSX 中是否有“规则”或约定?
use*_*686 22
最常见的是 GNUgetopt
风格,一个短划线代表短选项,两个短划线代表长选项。
最初,Unix 程序采用单字母选项,前面有一个破折号,并可选择捆绑:
ls -laF
ls -l -a -F
Run Code Online (Sandbox Code Playgroud)
上面的两个命令是相等的。
当一个选项接受一个值时,它会覆盖捆绑: In gpg -aofoo.gpg
,-a
并且-o
是选项并且foo.gpg
是给定的值-o
。
无论如何,他们中的大多数人做到了。
tar cvzf
是常见的景象。当前版本也接受tar -cvzf
,并且根据您是否添加破折号,参数将以非常不同的方式解释。例如,这两个意思是一样的(注意如何dashless选项不立即其价值前):
tar -xf file.tgz -vzO /etc/passwd /var/backups
Run Code Online (Sandbox Code Playgroud)
tar xfvzO file.tgz /etc/passwd /var/backups
Run Code Online (Sandbox Code Playgroud)
BSDps
总是使用-
; SysVps
从来没有。Linux 版本接受这两个版本,并根据选项是否以破折号为前缀来更改其行为。(与上面的 tar 示例不同, ps 也会更改选项的含义。)
X11 程序使用以单个破折号或加号开头的长选项:
xterm -class FooTerm +vb -u8
Run Code Online (Sandbox Code Playgroud)
这将设置选项class
和u8
,并取消设置vb
选项。
X11 样式与选项捆绑不兼容。
后来,长选项getopt()
以一种与单字母选项兼容的方式添加到 GNU中。
gpg -se --no-armor --output=signed.gpg
Run Code Online (Sandbox Code Playgroud)
这将设置-s
、-e
、 和--no-armor
(与 相反--armor
)。
通常,--output=signed.gpg
和--output signed.gpg
是等价的。(但并非总是如此——例如 curl 不接受前者,只接受后者。)
(如果我没记错的话,长选项+
在更改为 之前用作前缀--
。)
POSIX 规范有一节Utility Argument Syntax,它描述了单字符选项。
大多数 Windows 程序都使用自己的解析器,这让用户很抓狂。
/a /b /c
,有些允许 VMS-style /a/b/c
,而另一些则更喜欢 Unix-style /abc
。/
用作前缀,有些也接受-
,有些只 接受-
。/foo bar
, /foo=bar
, /foo:bar
。/quoted "like this"
,但有些程序将"
当作文字字符。(这是让程序自己进行分词的缺点;在 Unix 中,这是由 shell 处理的。)getopt
.通常第一个是在旧程序中发现的,这些程序根深蒂固而无法改变。那些长选项与标准getopt()
功能不兼容。
第二种样式是由 GNU 引入的getopt_long()
,并且符合现有标准,这些标准期望第一种样式捆绑短选项(即,-orange
预期意味着-o -r -a -n -g -e
)。强烈推荐这种多头期权风格。
归档时间: |
|
查看次数: |
1730 次 |
最近记录: |