我刚刚发现substr()
在 awk 中接受 0 或 1 作为字符串中的初始索引。我在 Gawk 5.1.0 和 MacOS awk 20070501 中对此进行了测试。
awk 'BEGIN {print substr("abcd", 0, 1)}'
输出“a”,同样如此
awk 'BEGIN {print substr("abcd", 1, 1)}'
和
awk 'BEGIN {print substr("abcd", 2, 1)}'
输出“b”只是为了证明没有明显错误。
除了提到 1 索引之外,我在man
页面或 Gawk文件中没有看到任何内容。info
为了与文档保持一致,并考虑index()
到第一个位置返回 1 和不匹配返回 0 的事实,始终使用 1 是一个好策略。
我的问题是为什么会出现这种二元性?另外,它是否记录在某处?是否有其他 awk 实现可以做到这一点?
来自GNU awk 在线文档:'substr() function':
非正起始索引的不一致
substr()
长期以来一直是我用于我自己的模块的标准之一,以确定awk
它正在运行的变体: