在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元字符。