Shell
如何轉義單引號?
這工作正常:
sed -i 's# @driver.find_element(:xpath, "//a\[contains(@href,##' temp_spec.rb
反對來源
@driver.find_element(:xpath, "//a[contains(@href,'change_district')]").click
我只剩下:
'change_district')]").click`
但是當我嘗試在末尾添加單引號時,它失敗了:
sed -i 's# @driver.find_element(:xpath, "//a\[contains(@href,\'##' temp_spec.rb syntax error near unexpected token `('
我
\'
用來轉義單引號。請注意,我使用 a
#
作為分隔符而不是普通/
分隔符,因為文本中有/
‘s。
單引號內的字元串由 shell 逐字使用(因此不能包含其他單引號,因為這將被視為一對單引號)。也就是說,您有幾種選擇:
- 結束單引號字元串,添加轉義(通過反斜杠或雙引號)單引號,然後立即開始字元串的以下部分:
$ echo 'foo'\''bar' 'foo'"'"'bar' foo'bar foo'bar
- 為您的字元串使用雙引號:
$ echo "foo'bar" foo'bar
這當然意味著你必須小心你的shell在雙引號內擴展了什麼;
- 如果您使用的是可以理解
\xHH
或\0nnn
轉義的實用程序(GNU sed 確實如此),您可以使用其中之一(ASCII 單引號位於程式碼點 39 (0x27),因此例如\x27
)。