No entiendo cómo bash evalúa el escape de caracteres de apóstrofe en cadenas entre comillas simples.
Aquí hay un ejemplo:
$ echo ''\''Hello World'\'''
'Hello World' # works
$ echo '\'Hello World\''
> # expects you to continue input
Intenté buscar explicaciones para esto, pero no pude obtener nada. ¿Qué está haciendo bash aquí?
echo \''Hello World'\'
Respuestas:
Entre comillas simples, no es posible escapar. No hay forma de incluir una comilla simple en comillas simples. Ver cita en man bash .
fuente
echo '\''
echo $'\'hello world\''
Además de las comillas simples y dobles compatibles con POSIX,
bash
proporciona un tipo adicional de comillas para permitir una pequeña clase de caracteres escapados (incluida una comilla simple) en una cadena entre comillas:Consulte la sección CITA en la
bash
página del manual, cerca del final de la sección. (Busque "ANSI C").fuente
Para explicar lo que está sucediendo con sus apóstrofes escapados, examinaremos su segundo ejemplo (también ver comillas simples o comillas fuertes ):
Aquí, has dejado la cita pendiente, como has dicho. Ahora recorte el final y cámbielo a:
La subcadena "Hello World" no fue citada aquí, pero se comportó como si fuera una cita fuerte. Usando su ejemplo nuevamente, recorte el final de manera diferente esta vez:
La subcadena "Hello World" nuevamente se comporta como si fuera una cita fuerte, con solo el apóstrofe agregado (escapado, por lo que ya no hay una sola cita) al final.
Cuando se agrega otra comilla simple al final (su ejemplo original), la cadena se deja colgando y esperando una comilla cerrada.
fuente
Ejemplo simple de comillas de escape en shell:
Se realiza cerrando uno ya abierto (
'
), colocando uno escapado (\'
) para imprimir y luego abriendo otro ('
).Alternativamente:
Se hace al terminar uno abierto (
'
), colocando una cita en otra cita ("'"
), luego abriendo otra ('
).Que hiciste (
'\'Hello World\''
), es:'
.\'
, la cadena se convierte en:'\'
.Hello World
No son citas.\'
) sin abrirlo.'
) está abriendo una cadena, pero no se espera cerrar ninguna.Entonces el ejemplo correcto sería:
Relacionado: ¿Cómo escapar de comillas simples dentro de cadenas de comillas simples?
fuente