Нелегальная картина в awk - PullRequest
       2

Нелегальная картина в awk

0 голосов
/ 29 августа 2018

В awk мы можем выражать шаблоны различными способами, e. г. как регулярные выражения, заключенные в разделители /.../, или как логическое выражение, где ненулевое значение (строка) или ненулевое значение (число) является истинным. У меня, однако, есть этот шаблон, и мне интересно, что он делает:

/test/p

Он печатает все строки, независимо от значения p и любого регулярного выражения. Как читать этот шаблон? В документации я ничего не нашел по этому поводу. Я ожидаю сообщение об ошибке, например, когда конечный разделитель отсутствует. (Я знаю, что это обычное выражение для sed.)

1 Ответ

0 голосов
/ 29 августа 2018

Значение /test/ оценивается как 0 или 1, в зависимости от того, соответствует ли текущая запись (строка) регулярному выражению.

Строка объединяется с результатом вычисления переменной p (возможно, пустой строкой).

Таким образом, вы получите условие "0" или "1", оба из которых true , что означает выполнение действия по умолчанию { print }.

Тот факт, что p выглядит как модификатор регулярного выражения, является просто совпадением; такое же поведение можно наблюдать с любым из следующего, которые все производят непустую строку (p предполагается пустой):

/test/ p  # concatenate 0 or 1 with empty variable
/test/ "" # concatenate 0 or 1 with empty string literal
0 p       # "0"
0 ""      # "0"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...