Scripts de shell de Linux: comportamiento variable inesperado

Scripts de shell de Linux: comportamiento variable inesperado

Tengo una variable $myvarque 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:

  1. ¿Por qué el eco imprime espacios en lugar de saltos de línea?
  2. ¿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 echoentre 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 -n1funciona perfectamente. Depende de sus requisitos y de los valores posibles si eso es realmente lo que necesita.

información relacionada