bashで文字をエスケープするのに問題があります。別のユーザーでコマンドを実行しているときに、一重引用符と二重引用符をエスケープしたいと思います。この質問のために、画面に次のようにエコーしたいとします。
'single quote phrase' "double quote phrase"
別のユーザーに切り替える必要がある場合、すべての特殊文字をエスケープするにはどうすればよいですか:
sudo su USER -c "echo "'single quote phrase' "double quote phrase"""
もちろん、これは正しい結果を生み出しません。
承認された回答:
次の文字列リテラル構文を使用できます:
> 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