一重引用符をエスケープする方法は? [コピー]

一重引用符をエスケープする方法は? [コピー]

これはうまくいきます:

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を区切り文字として使用していることに注意してください。//

ベストアンサー1

一重引用符内の文字列はシェルで文字通り使用されます(したがって、ペアの閉じた一重引用符として扱われるため、他の一重引用符を含めることはできません)。つまり、いくつかのオプションがあります。

  • 一重引用符で囲まれた文字列を終了し、エスケープされた(バックスラッシュまたは二重引用符で)一重引用符を追加してから、文字列の次の部分をすぐに開始します。

    $ echo 'foo'\''bar' 'foo'"'"'bar'
    foo'bar foo'bar
    
  • 文字列には二重引用符を使用してください。

    $ echo "foo'bar"
    foo'bar
    

    これはもちろん、シェルが二重引用符内で拡張されることに注意する必要があることを意味します。

  • 理解\xHHまたはエスケープ\0nnnするユーティリティ(GNU sedが実行する)を使用している場合は、次のいずれかを使用できます(ASCII単一引用符はコードポイント39(0x27)にあるため、たとえば\x27)。

おすすめ記事