Script de shell do Linux: comportamento de variável inesperada

3

Eu tenho uma variável $myvar que 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 o eco não gera novas linhas conforme esperado.

Obviamente, posso fazer isso:

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

Ele funcionará quando a saída do eco contiver uma palavra na primeira linha e uma palavra na segunda.

Eu tenho duas perguntas:

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

1 resposta

5

Agrupe o argumento em echo entre aspas para manter os espaços em branco corretamente.

echo "$myvar"

Caso contrário, os elementos separados por espaços em branco do valor 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 -n1 funciona perfeitamente. Depende das suas necessidades e dos valores possíveis, se isso é realmente o que você precisa.

    
por 06.09.2012 / 08:38