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
echo
is implementation-defined if any string contains a backslash or if the first argument is-n
. Portable programs can use theprintf
command if they need to omit trailing newlines or output control characters or backslashes.