2

mawk 不符合 POSIX,因为它不支持 POSIX ERE。

准确地说,它在其 ERE 中不支持像 [[:space:]] 这样的命名字符类,它们是 POSIX ERE 的一部分。

GNU awk 和 BusyBox awk 似乎都没有这个问题。

我在自己的 awk 脚本中多次遇到此问题,因为我真的很喜欢 [[:space:]] 来匹配 htab 以及空格和可能其他特定于语言环境的空白与单个字符类表达式。

所以我想知道为什么有几个 Linux 发行版选择在默认情况下为这样一个突出的实用程序提供一个不符合 POSIX 的实现,即使也可以使用符合 POSIX 的那些?

4

1 回答 1

3

查看http://archive.debian.org,似乎:

  • mawk 在 1997 年左右以 1.3.3 的形式出现
  • busybox 出现在 2002 年左右,为 0.60.2
  • busybox 终于在 2006 年达到了版本 1 (1.1.3)

我想 mawk 仍然是默认设置,主要原因有一个:

  1. 惯性。很长一段时间以来,它一直被打包为默认值。

请注意,mawkPOSIX 兼容的(在某种程度上)。从它的手册页:

mawk 符合 AWK 语言的 Posix 1003.2(草案 11.3)定义

不幸的是,这不是您关心的版本...

考虑到更新其版本是多么困难:

(两者仍然开放,后者自 2009 年以来!!),想象一下让 debian 完全用其他东西代替它是多么困难!

我怀疑还有:

  1. 安装 gawk (或您喜欢的实现)真的很容易
于 2019-03-27T02:44:34.303 回答