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