Shell

如何轉義單引號?

  • March 1, 2015

這工作正常:

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)。

引用自:https://unix.stackexchange.com/questions/75988