
Tengo una variable $myvar
que contiene dos líneas y quiero colocar la primera de ellas en una nueva variable.
Cuando lo intento:
$ myvar1 = $(echo $myvar | head -n 1)
No funciona porque echo no genera nuevas líneas como esperaba.
Obviamente puedo hacer esto:
$ myvar1 = $(echo $myvar | cut -d " " -f 1)
Funcionará ya que la salida de echo contiene una palabra en la primera línea y una palabra en la segunda.
Tengo dos preguntas:
- ¿Por qué el eco imprime espacios en lugar de saltos de línea?
- ¿Es posible hacerlo más fácil o más correcto? (No soy un profesional en scripts de shell, tal vez me falta algo aquí)
Respuesta1
Envuelva el argumento echo
entre comillas para conservar los espacios en blanco correctamente.
echo "$myvar"
De lo contrario, los elementos del valor separados por espacios en blanco se tratarán como argumentos individuales para echo
.
$ ls -1
Desktop
Documents
Downloads
Movies
Music
Pictures
Sites
$ myvar="$( ls -1 )"
$ echo $myvar
Desktop Documents Downloads Movies Music Pictures Sites
$ echo "$myvar"
Desktop
Documents
Downloads
Movies
Music
Pictures
Sites
Para obtener la primera línea de algo, head -n1
funciona perfectamente. Depende de sus requisitos y de los valores posibles si eso es realmente lo que necesita.