awk 子字符串索引 0

awk 子字符串索引 0

我刚刚发现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 实现可以做到这一点吗?

答案1

来自GNU awk 在线文档:“substr() 函数”

如果开始小于 1,substr() 将其视为 1。 (POSIX 没有指定在这种情况下要做什么:BWK awk 这样做,因此 gawk 也这样做。)开始大于字符串中的字符数,substr() 返回空字符串。同样,如果长度存在但小于或等于零,则返回空字符串。

相关内容