在bash中使用awk

在bash中使用awk,bash,awk,Bash,Awk,我正在阅读ldd,下面的代码是从中提取的: major=$(awk "\\$2==\"$module\" {print \\$1}" /proc/devices) 我知道这一行程序在做什么,但我不知道为什么其中使用转义字符\。谁能给我解释一下呢?这个命令行的作者应该使用单引号(')而不是双引号(“)。如果不这样做,他需要引用Shell特殊字符,以便将它们传递给awk命令。这个命令行的作者应该使用单引号(')而不是双引号(“)。如果不这样做,他需要引用Shell特殊字符,以便将它们传递给awk命

我正在阅读
ldd
,下面的代码是从中提取的:

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

我知道这一行程序在做什么,但我不知道为什么其中使用转义字符
\
。谁能给我解释一下呢?

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

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

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

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

major=$(awk -v module=$module '$2 == module { print $1 }' /proc/devices)
测试原始代码(在将
==
修复为
==
后,我会因为双反斜杠而出错;它们不是必需的。单反斜杠就足够了,如:

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

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

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

major=$(awk -v module=$module '$2 == module { print $1 }' /proc/devices)
测试原始代码(在将
==
修复为
==
后,我会因为双反斜杠而出错;它们不是必需的。单反斜杠就足够了,如:

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

大概在原著中,
awk
脚本中的两个等号之间没有空格?大概在原著中,
awk
脚本中的两个等号之间没有空格?这是故事的一部分;另一部分是shell变量
$module
必须添加到脚本中,这就是为什么单q没有使用uotes。有更好的方法可以做到这一点-如您在回答中指出的那样使用选项-v,或者只需对“$module”进行编码在单引号脚本中。这是故事的一部分;另一部分是shell变量
$module
必须添加到脚本中,这就是为什么不使用单引号的原因。有更好的方法可以做到这一点-如您在回答中指出的那样使用选项-v,或者只需编码
“$module””
在单引号脚本中。同意,但我认为模块名称不可能包含shell元字符。同意,但我认为模块名称不可能包含shell元字符。