Eu tenho uma variável pattern
com valor abaixo:
\"something//\anotherthing'
e um arquivo com o conteúdo abaixo:
\"something//\anotherthing'
\"something//\anotherthing
\"something/\anotherthing'
\"something\anotherthing'
\"something\/\/\\anotherthing'
Quando compara uma linha lida do arquivo com o padrão no ambiente com o operador ==
, obtenho a saída esperada:
patt="$pattern" awk '{print $0, ENVIRON["patt"], ($0 == ENVIRON["patt"]?"YES":"NO") }' OFS="\t" file
\"something//\anotherthing' \"something//\anotherthing' YES
\"something//\anotherthing \"something//\anotherthing' NO
\"something/\anotherthing' \"something//\anotherthing' NO
\"something\anotherthing' \"something//\anotherthing' NO
\"something\/\/\\anotherthing' \"something//\anotherthing' NO
Mas quando eu faço o mesmo com o operador ~
, os testes nunca correspondem.
(Eu esperava YES
na primeira linha, como acima):
patt="$pattern" awk '{print $0, ENVIRON["patt"], ($0 ~ ENVIRON["patt"]?"YES":"NO") }' OFS="\t" file
\"something//\anotherthing' \"something//\anotherthing' NO
\"something//\anotherthing \"something//\anotherthing' NO
\"something/\anotherthing' \"something//\anotherthing' NO
\"something\anotherthing' \"something//\anotherthing' NO
\"something\/\/\\anotherthing' \"something//\anotherthing' NO
Para corrigir o problema com a comparação ~
, preciso duplicar as fugas:
patt="${pattern//\/\\}" awk '{print $0, ENVIRON["patt"], ($0 ~ ENVIRON["patt"]?"YES":"NO") }' OFS="\t" file
\"something//\anotherthing' \"something//\\anotherthing' YES
\"something//\anotherthing \"something//\\anotherthing' NO
\"something/\anotherthing' \"something//\\anotherthing' NO
\"something\anotherthing' \"something//\\anotherthing' NO
\"something\/\/\\anotherthing' \"something//\\anotherthing' NO
Observe que o duplo escapa em resultado da impressão de ENVIRON["patt"]
na segunda coluna.
Pergunta:
Onde a sequência de escape em awk acontece ao usar o operador de comparação til% ~
? em $0
(ou $1
, $2
, ...) ou em ENVIRON["variable"]
?