В gawk gensub печатает только одну обратную косую черту

Здесь внизу я ожидал две косые черты, но получил одну,

$ awk '{$0=gensub(/\[/,"\\\\","g")}1' <(echo [)
\

sub работает нормально.

Спасибо,

Эрик Дж.


person ericj    schedule 21.01.2014    source источник
comment
Попробуйте 8 косых черт - bash, скорее всего, изменяет 4 косые черты на 2, а затем awk снова экранирует их, в результате чего получается одна косая черта.   -  person Njol    schedule 21.01.2014
comment
@Ньол. Нет, bash (или другая ОС/оболочка) не имеет к этому никакого отношения. См. ответ HakonHaegland - escape-символы в строковых литералах анализируются awk дважды, один раз, когда awk читает скрипт, и снова, когда awk выполняет скрипт, и правила для (g) sub() обработки обратной косой черты отличаются от правил для gensub() из-за истории /POSIX/и т.д.   -  person Ed Morton    schedule 21.01.2014


Ответы (1)


Поведение объясняется здесь: http://www.gnu.org/software/gawk/manual/gawk.html#Gory-Details

Из этой ссылки видно, что существует разница в поведении в зависимости от

  • какую версию awk вы используете, и
  • если вы используете gensub() или sub()
person Håkon Hægland    schedule 21.01.2014