Tengo problemas para escapar de personajes en bash. Me gustaría escapar de comillas simples y dobles mientras ejecuto un comando con un usuario diferente. A los fines 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.
shell
quoting
escape-characters
m33lky
fuente
fuente

bashestá en camino de hacerme enojar.Respuestas:
Puede usar la siguiente sintaxis literal de cadena:
De
man bashfuente
En un shell POSIX, suponiendo que en su cadena no haya expansión de variables, comandos o historial, y no haya nueva línea, siga estas prescripciones básicas:
Para citar una cadena genérica con comillas simples, realice las siguientes acciones:
Sustituya cualquier secuencia de caracteres sin comillas simples con la misma secuencia con comillas simples iniciales y finales agregadas:
'aaa' ==> ''aaa''Escape con una barra diagonal inversa cada carácter de comillas simples preexistentes :
' ==> \'en particular,
''aaa'' ==> \''aaa'\'Para citar una cadena genérica con comillas dobles, realice las siguientes acciones:
Agregue comillas dobles iniciales y finales:
aaa ==> "aaa"Escape con una barra diagonal inversa cada carácter de comillas dobles y cada carácter de barra diagonal inversa:
" ==> \", \ ==> \\Un par de ejemplos:
para que tu ejemplo se pueda expandir con lo siguiente:
fuente
Ejemplo simple de comillas de escape en shell:
Se realiza al terminar uno abierto (
'), colocando uno escapado (\') y luego abriendo otro (').Alternativamente:
Se realiza al terminar uno ya abierto (
'), colocando una cita en otra cita ("'") y luego abriendo otra (').Relacionado: ¿Cómo escapar de comillas simples dentro de cadenas de comillas simples? en stackoverflow SE
fuente
La respuesta aceptada funciona para citas simples (un nivel):
Para que el comando se presente al trabajo, debe citar dos veces.
Este script podría hacer todo el trabajo:
Ejecute el script para obtener:
La primera línea funciona para eco simple:
La segunda línea funcionará para el comando entre comillas dobles:
fuente
echo 'Soy un estudiante' no funciona. Pero lo siguiente funciona:
echo $ 'Soy un estudiante' De la página de manual de bash:
Una comilla simple no puede aparecer entre comillas simples, incluso cuando está precedida por una barra diagonal inversa. .... Las palabras de la forma $ 'string' se tratan especialmente. La palabra se expande a cadena, con los caracteres con barra invertida reemplazados según lo especificado por el estándar ANSI C.
fuente