As novas linhas finais são removidas antes que o valor seja armazenado na variável. Você pode querer fazer algo como:
var='cat; echo x'
e use ${var%x}
em vez de $var
. Por exemplo:
printf "%s" "${var%x}"
Observe que isso resolve o problema de novas linhas à direita, mas não o byte nulo um (se a entrada padrão não for texto), desde de acordo com a substituição do comando POSIX :
If the output contains any null bytes, the behavior is unspecified.
Mas as implementações do shell podem preservar os bytes nulos.