我正在使用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
选项。
有些人提到-v
在https://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确认这一点。你能在这里看到任何表明command
中posh
选项是可选的吗?
如果没有,{{1}}是否不符合POSIX?
答案 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:此功能是可选的。