在编写一些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$/
在您的情况下。这可能不适用于所有极端情况。