Como preservar o caractere de nova linha (\ n) ao capturar a saída de um comando em uma variável

3

Como um exemplo simples, eu tenho um monte de arquivos de código-fonte. Eu quero armazenar a saída do comando "head" para uma variável para todos esses arquivos.

Eu tentei:

output=$(head $file)

mas o que aconteceu é que isso automaticamente aparou todos os caracteres \n ao armazenar a saída em uma variável.

Como posso armazenar a saída do comando como está sem remover \n caracteres?

    
por return 0 09.12.2015 / 03:11

2 respostas

4

É uma falha conhecida de "expansão de comando" $(...) ou '...' que a última nova linha foi aparada.

Se esse for o seu caso:

$ output="$(head -- "$file"; echo x)"     ### capture the text with an x added.
$ output="${output%?}"                    ### remove the last character (the x).

Corrigirá o valor da saída.

    
por 09.12.2015 / 03:25
4

output=$(head $file) mantém as novas linhas incorporadas no valor de output e corta todas as novas linhas finais.

É como você faz referência à variável que faz a diferença.

Colocando a referência de variável entre aspas duplas, por exemplo:

echo "$output"

imprime as novas linhas incorporadas.

Isso funciona porque o shell interpreta apenas o cifrão, aspas anteriores e barras invertidas entre aspas duplas; espaços em branco (incluindo novas linhas) não são interpretados como separadores de campos quando dentro de aspas duplas.

    
por 09.12.2015 / 03:12