Tengo problemas para escapar de los personajes en bash. Me gustaría escapar de las comillas simples y dobles mientras ejecuto un comando con un usuario diferente. A los efectos de esta pregunta, digamos que quiero hacer eco de lo siguiente en la pantalla:
'single quote phrase' "double quote phrase"
¿Cómo puedo escapar de todos los caracteres especiales, si también necesito cambiar a un usuario diferente:
sudo su USER -c "echo "'single quote phrase' "double quote phrase"""
Por supuesto, esto no produce el resultado correcto.
Respuesta aceptada:
Puede utilizar la siguiente sintaxis de literal de cadena:
> echo $''single quote phrase' "double quote phrase"'
'single quote phrase' "double quote phrase"
De man bash
Las palabras de la forma $'cadena' se tratan de manera especial. La palabra se expande
a una cadena, con caracteres de escape de barra invertida reemplazados según lo especificado por
el estándar
ANSI C. Las secuencias de escape de barra invertida, si están presentes, se decodifican de la siguiente manera:
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