'original-awk'Debian软件包是否足以验证AWK脚本的POSIX兼容性?

时间:2019-04-27 06:43:53

标签: awk posix

在这种情况下,我指的是original-awk/stable,now 2012-12-20-6

换句话说,是否有* nix / BSD的重要版本正在运行Awk编程语言(Aho,Weinberger,Kernighan)未正确描述的AWK版本?

2 个答案:

答案 0 :(得分:1)

您似乎在做出一些假设,并在这里提出几个问题。

https://github.com/onetrueawk/awk是否完全实现了POSIX规范,而没有其他实现?

我认为答案是否定的。可能由于规范不够详细,或者由于作者实现了该标准未指定的功能,POSIX并未描述这些行为。

还请注意,FIXES自今年早些时候开始描述了POSIX兼容性增强功能;即使维护者的意图很可能是坚持POSIX,也可能不是最后一个。

POSIX也是一个移动的目标。尽管进度很慢,但它会更新。

1988年的书是否符合2019年的POSIX标准?

不,显然不是。它们是两种完全不同的文档,其用途完全不同。

原始的Awk实现是否影响POSIX?很明显。他们是否接受它并将其声明为一个真正的参考实现?显然不是。一方面,这肯定会冒他们的使命的风险-如果您希望互操作性委员会的工作在该领域取得成功,那么您就不能以牺牲他人为代价来支持任何特定的实现。

POSIX是否是合理的兼容性基线?

最终应该如此,但是在某些情况下,例如较小的内存占用比实际的互操作性更重要,更不用说花费时间和金钱来获得橡皮图章了。

(不要误会我的意思,在很多情况下,我和许多其他人将为该证书付费,或者如果缺少该证书,则将我们的钱花在其他地方。我只是指出,在很多情况下,我们赢得了不在乎。)

无论如何,您似乎都从错误的角度来接近这个目标。除非您比Awk作者更了解POSIX规范,否则脚本中可能存在互操作性错误,如果您的脚本在完美实现相关POSIX规范的Awk实现下运行,这些错误将不会消失。您的测试套件应该测试特定的行为,而不是从您的角度相信该规范及其实现没有错误。

bwk是兼容性的最低基准吗?

不,我想您会发现还有其他一些Awk实现,在某些情况下,这些实现更为原始。

我的记忆模糊,但是我回想起Awk领先的情况(可能支持Unicode吗?)和mawk而不是nawk的情况,没表现。

在后台,有人登场窃窃私语“ Busybox”。

这是2012年代表的产品吗?

绝对不是。如上所述,bwk的Awk仍得到积极支持,甚至得到开发。

答案 1 :(得分:1)

这不是答案,但根据my comment,这是POSIX未定义的项目列表,我请问gawk的人员在您使用[[:digit:]]调用gawk时提供警告:

enter image description here

请注意,除了POSIX兼容性之外,还有其他可移植性问题。例如,像nawk这样的字符类可移植到所有POSIX awk,但至少一个普通的awk(名称不佳的--posix不支持)(它在80年代中期问世时是新的与70年代中期的老awk进行比较-现在,不是很多!)。

上表也没有包含明显记录为gawk扩展的功能,并没有被gensub()之类的--lint禁用,也没有--lint已报告的任何内容-我创建该文件的意图是以获得 order allow,deny allow from 172.26.0.0/16 (IP of the nginx-proxy) allow from nginx-proxy.net (name of the container) allow from x.x.x.x (another IPes) deny from all 输出中包含的“缺失”未定义行为。