我读ldd
内,提取下面的代码来自:用awk庆典
major=$(awk "\\$2==\"$module\" {print \\$1}" /proc/devices)
我知道这是什么一个班轮是干什么的,我不知道是为什么转义字符其中使用了\
。谁可以向我解释?
我读ldd
内,提取下面的代码来自:用awk庆典
major=$(awk "\\$2==\"$module\" {print \\$1}" /proc/devices)
我知道这是什么一个班轮是干什么的,我不知道是为什么转义字符其中使用了\
。谁可以向我解释?
shell变量$module
必须被插入到awk
脚本,所以程序不能在单引号。这意味着,特殊的外壳任何字符必须用反斜杠保护。
如果笔者首选,代码可能是这样写的:
major=$(awk -v module=$module '$2 == module { print $1 }' /proc/devices)
测试原始代码(在修复= =
到==
后,由于双反斜杠而出现错误;他们没有必要。单个反斜杠就足够了,如下所示:
major=$(awk "\$2==\"$module\" {print \$1}" /proc/devices)
+1但为了安全起见,'-v module =“$ module”' – 2012-04-13 13:09:37
同意,但我断定模块名不可能包含shell元字符。 – 2012-04-13 15:33:21
该命令行的作者应该使用单引号(')而不是双引号(“)。如果不这样做,他需要引用Shell特殊字符,以便它们可以传递给awk-command。
这是故事的一部分;另一部分是必须将shell变量'$ module'添加到脚本中,这就是为什么不使用单引号的原因。 – 2012-04-13 06:47:02
有更好的方法可以做到这一点 - 或者使用选项* -v *,正如您在答案中指出的那样,或者只是在单引号脚本中编写'“'”$ module“'”'。 – ktf 2012-04-13 07:40:57
大概在原文中,'awk'脚本中的两个等号之间没有空格? – 2012-04-13 06:37:06
是的,这是一个错字 – 2012-04-13 06:43:39