为什么“-W”保留用于供应商扩展?

为什么“-W”保留用于供应商扩展?

为什么 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仅适用于两个命令:

  • command,它是-v(添加的 - 我不知道最初是谁添加的,可能是 Unix 规范工作组或 ksh 之一 - 因为 的原始定义-v不太令人满意)的变体。
  • dis,其中可以选择打印实用程序的版本。

POSIX 可以选择-V供应商,但这意味着command不会遵循准则。这会很烦人,因为command它是为了可移植性而创建的(既因为它的行为避免了 shell 内置函数和外部实用程序之间的差异,也因为它的功能类似于type但没有输出格式可变性)。此外,dis它远不是唯一用于-V“版本”的程序(其中大多数都没有被 POSIX 编码,因为它们不是基本系统的一部分:您不需要“打印版本”选项属于基本系统一部分的实用程序,您只需使用基本系统的版本号)。因此,-V无论是在 POSIX 内部还是外部,都会有太多的例外情况,这不是一个好的选择。

-W仅被采取cccc供应商之间的实现往往存在很大差异(特别是关于它期望的 C 方言),这导致它从标准的未来版本中删除(被 、 等取代c89c99。由于标准的下一版本不再具有cc,因此赋予-W新含义并不排除任何标准实用程序。据我所知,在非 POSIX 实用程序中,这并不是一个特别常见的选项字母选择,因此它是可供选择的。

为什么-W而不是另一个根本没有使用过的大写字母?我不确定,这可能是任意的,但它并不是突然出现的。该-W选项通过一个参数进行编码,cc该参数本身必须具有允许多路复用的特定结构:它必须以指定该选项适用的“子域”(编译阶段)的字符开头,然后是“特定于子域​​”的选项。由于 POSIX.1-2001 只为特定于实现的选项留下一个字母,因此必须对这一字母进行复用,以便允许多个特定于实现的行为更改。因此,-W选项cc是如何使用特定于实现的灵感-W- 不一定是确切的语法,而是采用带有指示某种“子选项”的前缀的参数的基本原则。

答案2

v通常是version或的用户verbose,您不能使交换机过载。请记住,这是从 AT&T/BSD 是唯一版本并且在商业化之前开始的。还有其他开关正在使用中,因此可用的开关相当少。

相关内容