
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 c
contiene. ¿Qué pasa si necesito el archivo para leer a\ b\ c
?
Lo he intentado printf %q $a
pero tampoco parece hacer lo que quiero.
Nota: También suponga que no produzco el contenido y $a
que 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 $a
se 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
, b
y 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