Preserva a formatação quando a saída do comando é enviada para uma variável? [duplicado]

9

Eu tenho um script bash. Se eu executar este comando para:

  1. grep para determinados padrões,
  2. transformar a saída,
  3. classifique a saída
  4. dedupe a saída

então eu recebo um grep por linha no terminal

LC_ALL=C grep -o --color -h -E -C 0 -r "$pattern" /pathto/Pre_N/ | tr -d '[:digit:]' | sort | uniq

No entanto, se eu colocá-lo em uma variável de saída, a formatação é perdida (ao ecoar em um arquivo ou ecoando na tela).

#!/usr/bin/env bash
output=$(LC_ALL=C grep -o --color -h -E -C 0 -r "$pattern" /pathto/Pre_N/ | tr -d '[:digit:]' | sort | uniq)
echo $output > $fn

Como posso preservar a formatação da saída desse comando depois de salvá-lo em uma variável?

    
por bernie2436 29.07.2014 / 12:19

1 resposta

17

Use aspas:

echo "$output" > $fn

a linha de eco é analisada pelo shell (após a expansão da variável) e todos os espaços entre os parâmetros são reduzidos a um espaço simples. Como exemplo:

$ var1="toto
> titi
> tutu
> "

$ echo $var1
toto titi tutu

$ echo "$var1"
toto
titi
tutu
    
por 29.07.2014 / 12:23