2011-06-09 142 views
3

我发现这一个嵌入在一个Makefile:这个awk脚本是做什么的?

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

我知道AWK的原型为:

awk 'pattern {action}' file 

但什么是@$$_是什么意思?

+0

你觉得这嵌入在一个Makefile?多一点背景会有所帮助。祝你好运。 – shellter 2011-06-09 14:10:28

+0

@shellter,是的,它在一个makefile中。 – 2011-06-09 14:31:21

回答

2

它看起来像下划线简直就是在这一个变量案件。并且由于它没有被初始化,所以它的值为零。因此,$_相当于$0,它是指已处理的整个行。我认为它也可以写成$x,因为x将是一个未初始化的变量。

由于它出现在makefile中,因此需要两个美元符号(它是makefile中的特殊字符)在命令中产生一个美元符号。

而正如Nemo已经提到的那样,@就是这种模式。任何包含@的行都会被匹配。

1

确实很奇怪。它似乎有同样的效果:

​​

而且也是同样的效果为:

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

也就是说,它采取的形式[email protected]的任何一行,并将其转换为"[email protected]\n"(有两个领先空格)。没有@的行因为与模式不匹配而被删除。

但我从来没有见过双美元符号,也不使用$_的代名词,也可以找到他们的任何地方记录......