为什么 POSIX 标准保留-W
供应商扩展的选项系统实用程序?我不明白为什么使用字母“W”。 'V'(对于vendor)可能更有意义。
也许这个问题应该转移到Retrocomputing SE。
答案1
该规定是在单一 Unix v2(1997)和单一 Unix v3(2001)。它不是凭空完成的:它必须考虑到以前的规范和现有的实践。如果已经为某些命令指定了字母,则现有命令将必须继承并且无法遵循此准则。如果某个字母已被 POSIX 未指定的流行程序或 POSIX 程序的流行实现使用,那么以后指定这些实用程序就会变得更加困难,并且用户也更难记住具有相似含义但不同命令具有不同字母的选项。
查看 SUSv2 中记录的选项:
grep -h -Po '(?<=^<dt><b>-)[[:alnum:]]' /usr/share/doc/susv2/susv2/xcu/*.html | sort | uniq -c
我们可以看到所有小写字母都被至少一个实用程序占用,大多数大写字母也是如此。免费字母是-B
、-J
、-K
和-Y
。-Z
-V
仅适用于两个命令:
POSIX 可以选择-V
供应商,但这意味着command
不会遵循准则。这会很烦人,因为command
它是为了可移植性而创建的(既因为它的行为避免了 shell 内置函数和外部实用程序之间的差异,也因为它的功能类似于type
但没有输出格式可变性)。此外,dis
它远不是唯一用于-V
“版本”的程序(其中大多数都没有被 POSIX 编码,因为它们不是基本系统的一部分:您不需要“打印版本”选项属于基本系统一部分的实用程序,您只需使用基本系统的版本号)。因此,-V
无论是在 POSIX 内部还是外部,都会有太多的例外情况,这不是一个好的选择。
-W
仅被采取cc
。cc
供应商之间的实现往往存在很大差异(特别是关于它期望的 C 方言),这导致它从标准的未来版本中删除(被 、 等取代c89
)c99
。由于标准的下一版本不再具有cc
,因此赋予-W
新含义并不排除任何标准实用程序。据我所知,在非 POSIX 实用程序中,这并不是一个特别常见的选项字母选择,因此它是可供选择的。
为什么-W
而不是另一个根本没有使用过的大写字母?我不确定,这可能是任意的,但它并不是突然出现的。该-W
选项通过一个参数进行编码,cc
该参数本身必须具有允许多路复用的特定结构:它必须以指定该选项适用的“子域”(编译阶段)的字符开头,然后是“特定于子域”的选项。由于 POSIX.1-2001 只为特定于实现的选项留下一个字母,因此必须对这一字母进行复用,以便允许多个特定于实现的行为更改。因此,-W
选项cc
是如何使用特定于实现的灵感-W
- 不一定是确切的语法,而是采用带有指示某种“子选项”的前缀的参数的基本原则。
答案2
v
通常是version
或的用户verbose
,您不能使交换机过载。请记住,这是从 AT&T/BSD 是唯一版本并且在商业化之前开始的。还有其他开关正在使用中,因此可用的开关相当少。