Script de shell do Linux: comportamento inesperado de variáveis

Script de shell do Linux: comportamento inesperado de variáveis

Eu tenho uma variável $myvarque contém duas linhas e quero colocar a primeira delas em uma nova variável.

Quando eu tento:

$ myvar1 = $(echo $myvar | head -n 1) 

Não funciona porque echo não gera novas linhas como eu esperava.

Obviamente eu posso fazer isso:

$ myvar1 = $(echo $myvar | cut -d " " -f 1)

Funcionará porque a saída do echo contém uma palavra na primeira linha e uma palavra na segunda.

Eu tenho duas perguntas:

  1. Por que echo imprime espaços em vez de quebras de linha?
  2. É possível torná-lo mais fácil ou mais correto (não sou um profissional em shell script, talvez esteja faltando alguma coisa aqui)

Responder1

Coloque o argumento echoentre aspas para reter os espaços em branco corretamente.

echo "$myvar"

Caso contrário, os elementos do valor separados por espaços em branco serão tratados como argumentos individuais 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 obter a primeira linha de algo, head -n1funciona perfeitamente. Depende dos seus requisitos e dos valores possíveis se é realmente isso que você precisa.

informação relacionada