Enquanto escrevia algum awk
código eu estava usando a --lint
opção para gawk
4.1.0. Para minha surpresa, recebo um aviso
aviso: o intervalo do formulário `[ob]' depende da localidade
mas meu código tem apenas um foo-bar
fora de uma classe de caracteres. Exemplo simplificado:
{ match($2, /^uid=([^,]+),dc=foo-bar$/, m) }
Também acho que o gawk 4.2.1 não emite mais esse aviso, então é um bug no gawk
?
Este é um bug no Gawk 4.1.0 especificamente. Foi introduzido por a7c502a756732ec9a1773d6169376bb7b25f4308 e corrigido por d52d17b46e53bb0d4a991cd32f859eb349d3b101 . O bug foi lançado pela primeira vez em 4.1.0 e a correção foi lançada pela primeira vez em 4.1.1.
Este é apenas um bug no linter, não um bug no código que é usado para comparar o texto com a expressão regular.
O bug faz com que o linter continue olhando além do colchete de fechamento quando está procurando por intervalos em conjuntos, então quando vê
[set]more stuff with a-dash
, ele alcança o subsequente-
e emite o aviso. Uma solução alternativa (se você realmente precisa de uma solução alternativa para um bug somente de linter em uma versão antiga) é colocar o próprio traço em um intervalo:/^uid=([^,]+),dc=foo[-]bar$/
no seu caso. Isso pode não funcionar em todos os casos de canto.