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

jiw*_*ene 2 options history posix

为什么 POSIX 标准保留-W系统实用程序供应商扩展的选项?我不明白为什么使用字母 \xe2\x80\x98W\xe2\x80\x99 。\xe2\x80\x98V\xe2\x80\x99 (对于v endor)可能更有意义。

\n

也许这个问题应该转移到Retrocomputing SE。

\n

Gil*_*il' 5

此规定是在Single Unix v2 (1997) 和Single Unix v3 (2001)之间添加的。它不是凭空完成的:它必须考虑到以前的规范和现有的实践。如果已经为某些命令指定了字母,则现有命令将必须继承并且无法遵循此准则。如果某个字母已被 POSIX 未指定的流行程序或 POSIX 程序的流行实现使用,那么以后指定这些实用程序就会变得更加困难,并且用户也更难记住具有相似含义但不同命令具有不同字母的选项。

\n

查看 SUSv2 中记录的选项:

\n
grep -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

\n

-V仅适用于两个命令:

\n
    \n
  • command,其中它是-v(添加 \xe2\x80\x94 我不知道最初是谁添加的,可能是 Unix 规范工作组之一或 ksh \xe2\x80\x94 因为最初的定义是-v\'非常令人满意)。
  • \n
  • dis,其中有一个打印实用程序版本的选项。
  • \n
\n

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

\n

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

\n

为什么-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 之类的。

\n