这个awk脚本做了什么?

时间:2011-06-09 13:46:58

标签: awk makefile

我在Makefile中嵌入了这个:

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

我知道awk的原型是:

awk 'pattern {action}' file

@$$_是什么意思?

2 个答案:

答案 0 :(得分:2)

在这种情况下,下划线字符看起来只是一个变量。由于它未初始化,因此其值为零。因此,$_相当于$0,它指的是已处理的整行。我认为它也可以写成$x,因为x将是一个未初始化的变量。

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

正如Nemo已经提到的,@只是模式。任何包含@的行都将匹配。

答案 1 :(得分:1)

好的,这很奇怪。它似乎具有与以下相同的效果:

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

也有同样的效果:

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

也就是说,它采用foo@bar形式的任意一行并将其转换为"foo@bar\n"(带有两个前导空格)。没有@的行会因为与模式不匹配而被删除。

但我从来没有见过双美元符号,也没有使用$_作为同义词,我也无法在任何地方找到它们......