Что делает этот сценарий awk? - PullRequest
3 голосов
/ 09 июня 2011

Я нашел это во встроенном в Makefile:

awk '/@/{print "  \"" $$_ "\\n\"" }' file

Я знаю, что прототип awk:

awk 'pattern {action}' file

Но что означают @ и $$_?

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

Похоже, что символ подчеркивания в данном случае просто переменная. И поскольку он не инициализирован, он имеет значение ноль. Таким образом, $_ эквивалентно $0, что относится ко всей строке, которая была обработана. Я думаю, что это также можно было бы написать $x, так как x будет неинициализированной переменной.

Поскольку он появляется в make-файле, необходимо два знака доллара (это специальный символ в make-файле), чтобы создать один знак доллара в команде.

И как уже упоминалось Немо, @ - это просто шаблон. Любая строка, содержащая @, будет сопоставлена.

1 голос
/ 09 июня 2011

ОК, это странно.Похоже, что он имеет тот же эффект, что и:

awk '/@/{print "  \"" $_ "\\n\"" }' file

, а также тот же эффект, что и:

awk '/@/{print "  \"" $0 "\\n\"" }' file

То есть он берет любую строку вида foo@bar и преобразует еедо "foo@bar\n" (с двумя ведущими пробелами).Строки без @ отбрасываются, потому что они не соответствуют шаблону.

Но я никогда не видел знак двойного доллара и не использовал $_ в качестве синонима, и не могу найти их документированнымив любом месте ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...