O problema não é echo , é o shell.
Tente usar aspas duplas:
echo "$flist" | grep myfile.txt
Deve funcionar bem.
Existe uma maneira (simples) de alimentar variáveis com fim de linha para outro programa em BASH? Considere o exemplo:
flist=$(ls -l)
echo $flist
echo substituirá todos os finais de linha por espaços, então minha saída será diferente do conteúdo da variável. Outro exemplo:
echo $flist | grep myfile.txt
Este comando não funcionará como esperado para gerar apenas informações sobre myfile.txt . Como faço para imprimir a linha que contém myfile.txt .
Aqui está uma solução:
cat << EOF | grep myfile.txt
$flist
EOF
Qualquer coisa menos feia?