¿Cómo escapar de una comilla simple en una cadena de comillas simples en Bash?


Quiero mostrar una cadena en Bash como esta

I'm a student

Por supuesto que puedes hacerlo así

echo "I'm a student"

¿Pero cómo lograr esto usando comillas simples alrededor de la cadena ?

Author: animuson, 2011-11-24

3 answers

echo 'I\'m a student'

No funciona. Pero las siguientes obras:

echo $'I\'m a student'

De la página man de bash:

Una comilla simple no puede aparecer entre comillas simples, incluso cuando están precedidas por una barra invertida.
....
Las palabras de la forma are'string' se tratan especialmente. Palabra se expande a cadena, con caracteres de escape de barra invertida reemplazados como especificado por el estándar ANSI C.

 73
Author: codaddict,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-24 08:38:29

La solución "fea" mencionada por Glenn Jackman debería ser listada como una respuesta de alto nivel. Funciona bien y es realmente hermoso en algunas situaciones.

'I'"'"'m a student'

Esto termina la cadena entrecomillada simple después de I luego comienza inmediatamente una cadena entrecomillada doble que contiene una comilla simple y luego comienza otra cadena entrecomillada simple. Bash entonces concatena todas las cadenas contiguas en una.

Hermoso!

 34
Author: Luke Gedeon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-02 17:22:27

El siguiente ejemplo funciona porque la comilla simple escapada \' está técnicamente entre dos argumentos con comillas simples

echo 'I'\''m a student'
 2
Author: Nick Jensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-20 06:29:04