日期:2014-05-16  浏览次数:20622 次

关于bash中的反引号问题
在一个shell脚本中看到这样一句
mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0

不太明白awk语句中为什么要用两个反斜杠,可以这样解释吗,在反引号中先对\\进行转义替换,变成'\'字符,然后执行awk命令,由于命令是双引号括起来的,所以再进行一次替换,将\$替换成'$'字符?


------解决方案--------------------
mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
执行mknod命令,上面的红色部分首先在bash的input stream当中parse掉。

然后执行

awk "\$2=="dsplink" {print \$1}" /proc/devices
由于是双引号,bash再处理一次。然后交给awk处理。

最后执行awk时,相当于
awk ‘$2=="dsplink" {print $1}’ /proc/devices