【问题标题】:Why do several Linux distros ship mawk by default even though it is not POSIX compliant?为什么有几个 Linux 发行版默认提供 mawk,即使它不符合 POSIX 标准?
【发布时间】:2019-08-17 11:55:06
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: awk busybox standards-compliance posix-ere mawk


    【解决方案1】:

    http://archive.debian.org,好像是:

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

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

    1. 惯性。很早就被默认打包了。

    请注意,mawk 符合 POSIX(在某种程度上)。从它的手册页:

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

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

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

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

    我怀疑还有:

    1. 安装 gawk(或您喜欢的实现)真的很容易

    【讨论】:

    • 我明白了。因此它符合较旧的 POSIX 版本,并且命名字符类刚刚在标准的更新版本中引入。烦人……但我明白你的意思。您对为什么它仍然存在于 Debian 中的解释也令人满意。谢谢!接受答案。
    • 您的解释甚至可能带来额外的好处:我从未在我的脚本中使用过 [:blank:] 字符类,因为我认为它“太新”,因为它也是由最近的一些 POSIX 修订。但是考虑到 AWK 中的命名字符类是最近添加的,我也可以使用 [:blank:] ...
    • 按照您引用的链接,我刚刚下载并构建了“invisible-island.net/datafiles/release/mawk.tar.gz”。事实证明,这个新版本不仅支持命名字符类,甚至还支持前面提到的新“[:blank:]”!所以我的问题根本不是 mawks 的错,即使对于最新的标准修订版,它也符合 POSIX。 Debian 只是喜欢发布恐龙。我通常喜欢这样。但在这种情况下并没有那么多。 ;-) 所以我现在会坚持使用 GNU sed。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    相关资源
    最近更新 更多