POSIX shell中是否需要`command -v`选项?豪华是否符合POSIX?

时间:2016-01-03 02:15:05

标签: shell posix

我正在使用posh来测试我想要在任何符合POSIX标准的shell上成功运行的shell脚本。在这样做的同时,我发现豪华版不支持command -v选项。两者都不是type

我理解不支持type,因为POSIX不要求[XSI]。这在https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=397601#10讨论。

  

“type”是X / Open扩展名;请注意POSIX中的XSI标记   标准。由于POSIX或debian政策不要求,豪华   没有实现它。

http://pubs.opengroup.org/onlinepubs/009695399/utilities/type.html证实了这一点。请参阅概要中的command -v保证金代码。

但我不明白为什么豪华版不支持command -v选项。

有些人提到-vhttps://bugs.debian.org/cgi-bin/bugreport.cgi?bug=218530#131是可选的。

  

“command -v”是一个可选的功能   http://www.opengroup.org/onlinepubs/009695399/utilities/   只是提一下。

但我无法在http://pubs.opengroup.org/onlinepubs/009695399/utilities/command.html确认这一点。你能在这里看到任何表明commandposh选项是可选的吗?

如果没有,{{1}}是否不符合POSIX?

2 个答案:

答案 0 :(得分:6)

这取决于他们与哪些版本的POSIX兼容。在POSIX 2004材料中,command在标准的可选部分中具有-v-V选项 - 用户可移植性'子集。

POSIX 2008(2013年修订)未标明command规范的任何部分,其中包含用户可移植性'子集:

  

概要

command [-p] command_name [argument...]

command [-p][-v|-V] command_name
     

描述

     

command实用程序将使shell将参数视为一个简单的命令,从而抑制命令搜索和执行中描述的shell函数查找,第1b项。

     

如果command_name与其中一个特殊内置实用程序的名称相同,则不会出现特殊内置实用程序开头的枚举列表中的特殊属性。在其他方面,如果command_name不是函数的名称,command(没有选项)的效果应与省略command的效果相同。

     

当使用-v-V选项时,command实用程序应提供有关shell如何解释命令名称的信息。

2008/2013版本中没有列出可选标志。在较早的(2004)标准中,-v-V选项是用户可移植性的一部分'子集,不是核心的一部分。

因此,如果他们想要符合十多年前的标准,就不需要-v-V;如果他们想要符合现行标准(超过5年),则应支持这些选项。

答案 1 :(得分:2)

请参阅[UP]定义旁边的-v页边距代码。每the list of margin code notations(强调添加):

  

[UP] 用户可移植性

     

所描述的功能是可选的。

     

如果适用,实用程序在“概要”部分中标有“上边距”图例。如果其他语义适用于实用程序,则通过使用UP边缘图例来识别材料。

因此,它是黑色字母POSIX:此功能是可选的。