2011-11-24 37 views
38

Quiero mostrar una cadena en Bash como esto¿Cómo escapar de una comilla simple en una cadena de comillas simples en Bash?

I'm a student 

Por supuesto, puede hacerlo de esta manera

echo "I'm a student" 

Pero cómo lograr esto durante el uso de comillas simples alrededor de la cadena?

+4

Lo sentimos, no hay manera de colocar una comilla simple entre comillas simples. Ver http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters en la sección '3.1.2.2 Single Quotes' –

Respuesta

70
echo 'I\'m a student' 

no funciona. Sin embargo, las siguientes obras:

echo $'I\'m a student' 

Desde la página del manual de bash:

Una comilla simple pueden no ocurrir entre comillas simples, incluso cuando precedido por una barra invertida .
....
Las palabras de la forma $ 'cadena' son tratadas especialmente. La palabra se expande a la cadena, con caracteres escapados en barra invertida reemplazados como especificados por el estándar ANSI C.

+3

Una forma más fea es:' 'I' "'"' ma student ' –

+32

¿Por qué, bash, * whyyyy *? –

+2

'echo $ '¡Soy un estudiante!'' =>'!': Evento no encontrado', esta no es una cadena * real * comilla simple que, en bash, debería proteger de cualquier interpretación. – regilero

33

La solución "fea" mencionada por Glenn Jackman en realidad debe aparecer como una respuesta de nivel superior. Funciona bien y es realmente hermoso en algunas situaciones.

'I'"'"'m a student' 

Esto pone fin a la citada cadena única después I inmediatamente comienza una cadena entre comillas dobles que contiene una comilla simple y luego comienza otra cadena entre comillas simples. Bash luego concatena todas las cadenas contiguas en una.

¡Hermoso!

+18

Creo que nuestras definiciones de belleza difieren un tanto ...;) –

0

El siguiente ejemplo funciona porque la comilla simple escapado \' es técnicamente entre dos argumentos entre comillas simples

echo 'I'\''m a student' 
Cuestiones relacionadas