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