我讀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