互联网说要在Awk中使用shell变量,你可以双引用Awk程序(这是一个坏主意),或者使用Awk的变量传递机制(这是正确的方法)。
为什么我会这样做?
$ export name=Andrew
$ echo 'hello' | awk '{system("echo ${name}, " $1)}'
Andrew, hello
是因为Awk生成一个shell来执行system
命令,变量替换由该shell而不是Awk解释,并且该shell是启动Awk的shell的子shell,继承它的shell变量?
答案 0 :(得分:3)
awk
将文字字符串echo ${name}, hello
传递给系统shell进行处理。由于您在调用name
之前导出了awk
,name=Andrew
出现在awk
的环境中,awk
依次将其传递给系统shell。然后,shell可以将${name}
扩展为Andrew。