Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

¿Cómo guardar un texto de varias líneas en una variable Bash?

5 de marzo de 2009

Uno de mis scripts (llamémoslo mi_script) genera como resultado varias líneas de texto. Ejemplo:

abc
def
ghi

Lo que quiero ahora es recoger en otro script esa salida y almacenarla en una variable. Algo así:

declare RESULTADO=$(./mi_script)

El problema es que si hago un echo de la variable $RESULTADO, lo que obtengo es:

abc def ghi

¿Existe alguna manera de guardar también los saltos de línea para que el resultado sea exactamente igual que el original?


Estás leyendo una traducción autorizada de la pregunta Capturing multiple line output to a bash variable planteada por Parker en StackOverflow.


Respuestas

#1

En realidad, la variable RESULTADO ya guarda bien toda la información. Prueba a ejecutar lo siguiente y verás que es verdad:

$ echo $RESULTADO
abc def ghi
 
$ echo "$RESULTADO"
abc
def
ghi

La diferencia es que cuando se encierra con comillas dobles el nombre de una variable, Bash interpreta que se deben mantener todos los espacios en blanco originales, incluyendo los saltos de línea.

Si no utilizas las comillas dobles, Bash reemplaza dos o más espacios en blanco, tabuladores o saltos de línea consecutivos por un solo espacio en blanco. Y eso es lo que estaba ocurriendo en tu caso.

@librosweb

11 octubre 2014, 20:55