2

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

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

我知道这一个班轮在做什么,我不知道为什么在其中\使用转义字符。谁能给我解释一下?

4

2 回答 2

4

shell 变量$module必须插入到awk脚本中,所以程序不能用单引号。这意味着必须用反斜杠保护外壳特殊的任何字符。

如果作者愿意,代码可以这样写:

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

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

major=$(awk "\$2==\"$module\" {print \$1}" /proc/devices)
于 2012-04-13T06:45:57.763 回答
0

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

于 2012-04-13T06:28:05.960 回答