在bash中使用awk

时间:2012-04-13 06:23:22

标签: bash awk

我正在阅读ldd,并从中提取以下代码:

major=$(awk "\\$2==\"$module\" {print \\$1}" /proc/devices)

我知道这个班轮正在做什么,我不知道的是为什么在其中使用转义字符\。谁可以向我解释一下?

2 个答案:

答案 0 :(得分:4)

shell变量$module必须插入到awk脚本中,因此程序不能用单引号括起来。这意味着必须使用反斜杠保护shell特有的任何字符。

如果作者更喜欢,代码可能是这样编写的:

major=$(awk -v module=$module '$2 == module { print $1 }' /proc/devices)

测试原始代码(在将= =修复为==之后,由于双反斜杠我得到错误;它们不是必需的。单个反斜杠就足够了,如:

major=$(awk "\$2==\"$module\" {print \$1}" /proc/devices)

答案 1 :(得分:0)

这个命令行的作者应该使用单引号(')而不是双引号(“)。如果不这样做,他需要引用Shell特殊字符,以便它们可以传递给awk-command。