我在Makefile中嵌入了这个:
awk '/@/{print " \"" $$_ "\\n\"" }' file
我知道awk的原型是:
awk 'pattern {action}' file
但@
和$$_
是什么意思?
答案 0 :(得分:2)
在这种情况下,下划线字符看起来只是一个变量。由于它未初始化,因此其值为零。因此,$_
相当于$0
,它指的是已处理的整行。我认为它也可以写成$x
,因为x将是一个未初始化的变量。
由于它出现在makefile中,因此需要两个美元符号(它是makefile中的特殊字符)才能在命令中生成一个美元符号。
正如Nemo已经提到的,@
只是模式。任何包含@
的行都将匹配。
答案 1 :(得分:1)
awk '/@/{print " \"" $_ "\\n\"" }' file
也有同样的效果:
awk '/@/{print " \"" $0 "\\n\"" }' file
也就是说,它采用foo@bar
形式的任意一行并将其转换为"foo@bar\n"
(带有两个前导空格)。没有@
的行会因为与模式不匹配而被删除。
但我从来没有见过双美元符号,也没有使用$_
作为同义词,我也无法在任何地方找到它们......