Após expandir uma expansão de parâmetro ( $var ) ou substituição de comando ( $(cmd) ), o shell remove todos os espaços em branco do resultado expandido para dividi-los em palavras (divisão de palavras). Além disso, ele tenta corresponder nomes de arquivos para as palavras que contêm * , ? e / ou [...] (expansão do nome do caminho). Então, sempre inclui expansões entre aspas duplas ( "$var" e "$(cmd)" ) para evitar que a divisão de palavras e a expansão do nome do caminho sejam tentadas.
$ var=$'two\nlines here'
$ echo $var
two lines here
$ echo "$var"
two
lines here
$
Por isso:
echo "$var" | tr ' ' '\n'
# or using bash's more powerful types of parameter expansions
echo "${var// /$'\n'}"
var="$(echo "$var" | tr ' ' '\n')"
Veja também: link