Seu problema é que Bash e Dash têm echo como internos, mas as duas implementações não se comportam da mesma forma quando recebem uma string contendo \ :
echo 'abc\ndef'
Isso produz resultados diferentes nas duas camadas.
Você pode obter resultados consistentes usando printf '%s\n' ; embora isso também seja interno, produz a mesma saída em ambos os shells (isso não é verdadeiro para todas as conversões, por exemplo, bash fornece uma %q conversion que traço não faz):
printf '%s\n' 'abc\ndef'
Isso produz abc\ndef em ambos os shells.
Você pode alternativamente usar uma implementação externa de echo ; no Linux, coreutils fornece o eco GNU em /bin/echo :
/bin/echo 'abc\ndef'
Note, no entanto, que isso é menos portável. O arquivo info do GNU tem isto a dizer:
POSIX does not require support for any options, and says that the behavior of
echois implementation-defined if any string contains a backslash or if the first argument is-n. Portable programs can use theprintfcommand if they need to omit trailing newlines or output control characters or backslashes.