此规定是在Single Unix v2 (1997) 和Single Unix v3 (2001)之间添加的。它不是凭空完成的:它必须考虑到以前的规范和现有的实践。如果已经为某些命令指定了字母,则现有命令将必须继承并且无法遵循此准则。如果某个字母已被 POSIX 未指定的流行程序或 POSIX 程序的流行实现使用,那么以后指定这些实用程序就会变得更加困难,并且用户也更难记住具有相似含义但不同命令具有不同字母的选项。
\n查看 SUSv2 中记录的选项:
\ngrep -h -Po \'(?<=^<dt><b>-)[[:alnum:]]\' /usr/share/doc/susv2/susv2/xcu/*.html | sort | uniq -c\n
Run Code Online (Sandbox Code Playgroud)\n我们可以看到所有小写字母都被至少一个实用程序占用,大多数大写字母也是如此。免费字母是-B
、-J
、-K
和-Y
。-Z
-V
仅适用于两个命令:
command
,其中它是-v
(添加 \xe2\x80\x94 我不知道最初是谁添加的,可能是 Unix 规范工作组之一或 ksh \xe2\x80\x94 因为最初的定义是-v
\'非常令人满意)。dis
,其中有一个打印实用程序版本的选项。POSIX 可以选择-V
供应商,但这意味着command
不会遵循准则。这会很烦人,因为它command
是为了可移植性而创建的(既因为它的行为避免了 shell 内置函数和外部实用程序之间的差异,也因为它的功能类似于type
但没有输出格式可变性)。此外,dis
它远不是唯一用于-V
\xe2\x80\x9cversion\xe2\x80\x9d 的程序(其中大多数都没有被 POSIX 编码,因为它们不是基本系统的一部分:你对于属于基本系统一部分的实用程序,不需要 \xe2\x80\x9c 打印版本\xe2\x80\x9d 选项,您只需使用基本系统的版本号)。因此,无论-V
是在 POSIX 内部还是外部,都会有太多的例外情况,这不是一个好的选择。
-W
仅被 采取cc
。cc
供应商之间的实现往往存在很大差异(特别是关于它期望的 C 方言),这导致它从标准的未来版本中删除(被c89
、c99
等取代)。由于下一版本的标准不再有cc
,-W
新含义并不排除任何标准实用程序。据我所知,在非 POSIX 实用程序中,这不是特别常见的选项字母选择,因此它是可供选择的。
为什么-W
而不是另一个根本没有使用的大写字母?我不确定,它可能是任意的,但它并不是突然出现的。该-W
选项通过一个参数进行编码cc
,该参数本身必须具有允许多路复用的特定结构:它必须以指定该选项适用的 \xe2\x80\x9csubdomain\xe2\x80\x9d (编译阶段)的字符开头,然后通过 \xe2\x80\x9c 子域特定的 \xe2\x80\x9d 选项。由于 POSIX.1-2001 只为特定于实现的选项留下一个字母,因此必须对这一字母进行复用,以便允许多个特定于实现的行为更改。因此,-W
选项cc
是关于如何具体实施的灵感-W
\xe2\x80\x94 的灵感 \xe2\x80\x94 不一定是确切的语法,而是采用带有指示 \xe2\x80\x9csub-option\ 的前缀的参数的基本原则\ xe2\x80\x9d 之类的。
归档时间: |
|
查看次数: |
83 次 |
最近记录: |