¿Cómo puedo hacer eco con espacios escapados?

¿Cómo puedo hacer eco con espacios escapados?

Quiero repetir una variable con espacios en un archivo de texto.

a=a\ b\ c
echo $a > /tmp/a

Lo anterior da como resultado un archivo que a b ccontiene. ¿Qué pasa si necesito el archivo para leer a\ b\ c?

Lo he intentado printf %q $apero tampoco parece hacer lo que quiero.

Nota: También suponga que no produzco el contenido y $aque se me pasa fuera de mi control. Solo necesito asegurarme de que esté guardado con espacios escapados.

Respuesta1

Las barras invertidas escapan del siguiente carácter; en su caso, ha escapado del espacio, momento en el que el contenido de $ase convierte en: a b c. Si desea que el contenido de $a tenga barras invertidas, debe escapar de ellas:

a=a\\\ b\\\ c

o

a='a\ b\ c'

Si $a ya contiene texto con espacios y desea guardarlo en un archivo, simplemente:

printf "%q" "$a" > /tmp/a

Cuando corriste:

printf "%q" $a > /tmp/a

Le dijiste a printf que citara3fragmentos de texto divididos y agrupados: a, by c, de los que escapó diligentemente (sin hacer nada) antes de ser redirigido a /tmp/a como abc.

Lee bien:¿Por qué mi script de shell se atasca con espacios en blanco u otros caracteres especiales?para ver qué está pasando.

Respuesta2

Sólo ponlo entre comillas.

a="a\ b\ c"

Alternativamente, escapar del escape.

a=a\\\ b\\\ c

Ambos terminan con el mismo resultado.

Respuesta3

Solución basada en los comentarios de Jeff:

echo $a | sed -e "s/ /\\\ /g" > /tmp/a

información relacionada