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
bash
está en camino de hacerme enojar.Respuestas:
Puede usar la siguiente sintaxis literal de cadena:
De
man bash
fuente
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