Ich habe Probleme mit dem Escaping von Zeichen in Bash. Ich möchte einfache und doppelte Anführungszeichen maskieren, während ich einen Befehl unter einem anderen Benutzer ausführe. Nehmen wir für die Zwecke dieser Frage an, ich möchte Folgendes auf dem Bildschirm ausgeben:
'single quote phrase' "double quote phrase"
Wie kann ich alle Sonderzeichen entkommen, wenn ich auch zu einem anderen Benutzer wechseln muss:
sudo su USER -c "echo "'single quote phrase' "double quote phrase"""
Das führt natürlich nicht zum richtigen Ergebnis.
Akzeptierte Antwort:
Sie können die folgende String-Literal-Syntax verwenden:
> echo $''single quote phrase' "double quote phrase"'
'single quote phrase' "double quote phrase"
Von man bash
Wörter der Form $’string’ werden besonders behandelt. Das Wort wird
zu einem String erweitert, wobei Backslash-Escape-Zeichen wie im
ANSI-C-Standard
angegeben ersetzt werden. Backslash-Escape-Sequenzen, falls vorhanden, werden wie folgt dekodiert:
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