这是 BSD Awk 记录的行为还是一个错误?

这是 BSD Awk 记录的行为还是一个错误?

显然,BSD Awk 中包含字符类的括号表达式将忽略字符类之后的任何其他字符:

MacOS $ cat file.txt
_
-
.
a
B
8
:
;
@
~
,
MacOS $ awk '/[@~.[:alnum:]:;-]/' file.txt 
.
a
B
8
@
~
MacOS $ awk '/[-;:@~.[:alnum:]]/' file.txt 
-
.
a
B
8
:
;
@
~
MacOS $ awk '/[^@~.[:alnum:]:;-]/' file.txt 
_
-
:
;
,
MacOS $ awk '/[^-;:@~.[:alnum:]]/' file.txt 
_
,
MacOS $ 

在 GNU Awk(在 Ubuntu 16.04 上显示)上,行为有所不同;括号表达式中的其他字符无论位于字符类之前还是之后都会进行相同的处理:

Linux $ cat file.txt
_
-
.
a
B
8
:
;
@
~
,
Linux $ awk '/[@~.[:alnum:]:;-]/' file.txt 
-
.
a
B
8
:
;
@
~
Linux $ awk '/[-;:@~.[:alnum:]]/' file.txt 
-
.
a
B
8
:
;
@
~
Linux $ awk '/[^@~.[:alnum:]:;-]/' file.txt 
_
,
Linux $ awk '/[^-;:@~.[:alnum:]]/' file.txt 
_
,
Linux $ 

这有记录在任何地方吗?或者,如果它是一个错误,那么它是已知的漏洞? (如果这是一个已知的错误,它会在 Awk 的更高版本中修复吗?)


我应该用这个发现做什么? 我应该在哪里打开错误报告吗?

答案1

在 FreeBSD 11.2-RELEASE 上测试匹配到正确的结果,并且与最近的 GNU/Linux 上的结果匹配。

也许该行为是此处描述的错误的更一般情况:https://github.com/onetrueawk/awk/issues/45

至于提交错误,由于错误本身似乎已经修复,剩下的问题是苹果远远落后于“上游”,你可以尝试这个(尽管我之前没有经历过):https://developer.apple.com/bug-reporting/

请注意最后一个选项,这可能是 B 计划,如果我们可以有把握地假设在他们当前的 Beta 版本中,他们仍然尚未从上游更新 UNIX 用户区。

相关内容