Enquanto a solução óbvia, padrão e recomendada é usar printf , fazer isso com echo pode ser bastante complicado dependendo da implementação (não é tão complicado quanto para -n ).
compatível com POSIX.2017 echo s
POSIX requer echo -e para a saída -e<newline> . Então é só
echo -e
lá. Compatível com POSIX echo s a esse respeito (a maioria deles não é compatível com POSIX em outros aspectos, a especificação POSIX é quase inútil quando se trata de echo ) inclui:
- o
echo incorporado em bash quando as opções xpg_echo e posix foram ativadas (no tempo de execução ou no tempo de criação, como para o /bin/sh do macOS da Apple). set -o posix; shopt -s xpg_echo (a opção posix também pode ser ativada se chamada como sh ou quando POSIXLY_CORRECT ou SHELLOPTS=posix estiver no ambiente).
- o
/bin/echo de sistemas UNIX certificados (AIX, macOS, Solaris pelo menos) e a maioria dos BSDs
- o
echo incorporado em dash , ksh88 , o shell Bourne, csh, tcsh, posh, rc, es, akanga
- GNU
echo ( /bin/echo nos sistemas GNU) quando POSIXLY_CORRECT está no ambiente.
- o
echo incorporado de mksh e alguns outros pdksh-derives quando a opção posix está ativada.
- o
echo incorporado de yash quando $ECHO_STYLE não está definido ou é um dos SYSV , XSI , BSD , DASH , RAW
implementações que suportam -e
Inclui echo da pesquisa Unix V8 (de onde vem), GNU, busybox, echo incorporado em bash , zsh , pdksh e derivados, fish , alguns ash com base em shells como busybox sh ou sh de alguns BSDs, versões recentes de ksh93 (em alguns sistemas e com alguns valores de $PATH ) com suas configurações padrão, yash com $ECHO_STYLE one de GNU ou ZSH :
echo -e '-e\n\c'
As implementações que suportam -e suportam invariavelmente -n , portanto:
echo -ne '-e\n'
também funcionaria.
zsh
zsh echo é a única implementação que eu sei que suporta um marcador de final de opção ( - ).
echo - -e
Tornando o único shell echo parecido com o Bourne que pode gerar dados arbitrários (também porque é o único que suporta bytes NUL em suas variáveis e os argumentos de seus componentes internos) com echo -E - "$data" )