Bashシェルで引用符をエスケープする方法は?

Bashシェルで引用符をエスケープする方法は?

Bashで文字をエスケープするのに問題があります。別のユーザーでコマンドを実行するときは、単一​​引用符と二重引用符をエスケープしたいと思います。この質問の目的のために、次の内容を画面に表示したいとします。

'single quote phrase' "double quote phrase"

別のユーザーに切り替える必要がある場合は、すべての特殊文字をどのようにエスケープできますか?

sudo su USER -c "echo \"'single quote phrase' \"double quote phrase\"\""

もちろん、そうしても正しい結果は出ません。

ベストアンサー1

次の文字列リテラル構文を使用できます。

> echo $'\'single quote phrase\' "double quote phrase"'
'single quote phrase' "double quote phrase"

~からman bash

$ 'string'形式の単語は特別に扱われます。ワードは、ANSI C規格で指定されているように置き換えられたバックスラッシュエスケープ文字を使用して文字列に展開されます。バックスラッシュエスケープシーケンスがある場合は、次のようにデコードされます。

          \a     alert (bell)
          \b     backspace
          \e
          \E     an escape character
          \f     form feed
          \n     new line
          \r     carriage return
          \t     horizontal tab
          \v     vertical tab
          \\     backslash
          \'     single quote
          \"     double quote
          \nnn   the eight-bit character whose value is the octal value nnn (one to three digits)
          \xHH   the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
          \cx    a control-x character

おすすめ記事