为什么变量替换在这个awk单线程中起作用?

时间:2014-12-12 15:14:47

标签: bash shell awk

互联网说要在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变量?

1 个答案:

答案 0 :(得分:3)

awk将文字字符串echo ${name}, hello传递给系统shell进行处理。由于您在调用name之前导出了awkname=Andrew出现在awk的环境中,awk依次将其传递给系统shell。然后,shell可以将${name}扩展为Andrew。