No bash (e em muitos outros shells), $() é usado para obter a saída de um comando e usá-lo como os argumentos de outro comando.
Aqui, o que acontece é:
Primeiro execute cat :
1
2
3
Em seguida, substitua o bloco $() por:
echo 1
2
3
Agora, o shell precisa interpretar essa entrada e enviar argumentos corretos para echo . Para isso, deve dividir 1 , 2 e 3 em palavras: é aqui que as novas linhas são removidas.
Finalmente, o shell envia o seguinte:
Programa: echo
Argumentos: 1 2 3
Isso exibirá o que você viu:
1 2 3
Porque quando echo tem vários argumentos, exibe todos eles separados por espaço.