![“警告:‘[ob]’形式的范围取决于区域设置”是 gawk 4.1.0 中的错误吗?](https://linux22.com/image/201388/%E2%80%9C%E8%AD%A6%E5%91%8A%EF%BC%9A%E2%80%98%5Bob%5D%E2%80%99%E5%BD%A2%E5%BC%8F%E7%9A%84%E8%8C%83%E5%9B%B4%E5%8F%96%E5%86%B3%E4%BA%8E%E5%8C%BA%E5%9F%9F%E8%AE%BE%E7%BD%AE%E2%80%9D%E6%98%AF%20gawk%204.1.0%20%E4%B8%AD%E7%9A%84%E9%94%99%E8%AF%AF%E5%90%97%EF%BC%9F.png)
在编写一些awk
代码时,我使用了4.1.0--lint
的选项gawk
。令我惊讶的是我收到了警告
警告:“[ob]”形式的范围取决于区域设置
但我的代码只有foo-bar
字符类的外部。简化示例:
{ match($2, /^uid=([^,]+),dc=foo-bar$/, m) }
另外我认为 gawk 4.2.1 不再输出该警告,那么这是一个错误gawk
吗?
答案1
这是 Gawk 4.1.0 中的一个错误。它是由a7c502a756732ec9a1773d6169376bb7b25f4308并由固定d52d17b46e53bb0d4a991cd32f859eb349d3b101。该错误在 4.1.0 中首次发布,修复程序在 4.1.1 中首次发布。
这只是 linter 中的错误,而不是用于实际将文本与正则表达式匹配的代码中的错误。
该错误导致 linter 在查找集合中的范围时继续查看结束括号,因此当它看到 时[set]more stuff with a-dash
,它会到达后续位置-
并发出警告。一种解决方法(如果您确实需要针对旧版本中仅 linter 错误的解决方法)是将破折号本身放在一个范围内:/^uid=([^,]+),dc=foo[-]bar$/
在您的情况下。这可能不适用于所有极端情况。