Embora a solução óbvia, padrão e recomendada seja usar printf, fazê-lo echopode ser bastante complicado, dependendo da implementação (não tão complicado quanto no -nentanto).
Compliant POSIX.2017 echos
O POSIX requer echo -e a saída -e<newline>. Então é só
echo -e
há. Em conformidade com o POSIX echo(a maioria deles não é compatível com POSIX em outros aspectos, a especificação POSIX é quase inútil no que diz respeito a echo):
- o início
echode bashquando as opções xpg_echoe posixforam ativadas (em tempo de execução ou tempo de compilação, como no /bin/shApple macOS). set -o posix; shopt -s xpg_echo(a posixopção também pode ser ativada se invocada como shou quando POSIXLY_CORRECTou SHELLOPTS=posixestiver no ambiente).
- os
/bin/echosistemas UNIX certificados (AIX, macOS, Solaris pelo menos) e a maioria dos BSDs
- o
echobuiltin de dash, ksh88o shell Bourne, csh, tcsh, fino, rc, es, akanga
- GNU
echo( /bin/echoem sistemas GNU) quando POSIXLY_CORRECTestiver no ambiente.
- o
echobuiltin de mkshe alguns outros pdksh deriva quando sua posixopção está ativada.
- o
echoembutido de yashquando $ECHO_STYLEou não é configurado um ou de SYSV, XSI, BSD, DASH,RAW
implementações que suportam -e
Inclui echode pesquisa Unix V8 (de onde vem), GNU, busybox, o echoembutida de bash, zsh, pdkshe derivados, fish, algumas ashconchas baseados como busybox shou a shde alguns BSDs, versões recentes do ksh93(em alguns sistemas, e com alguns valores de $PATH) com suas configurações padrão, yashcom $ECHO_STYLEum GNUou ZSH:
echo -e '-e\n\c'
As implementações que suportam -einvariavelmente -n, portanto:
echo -ne '-e\n'
funcionaria também.
zsh
zsh's echoé a única aplicação que eu sei que suporta um marcador de fim-de-opção ( -).
echo - -e
Tornando-o o único shell semelhante a Bourne echoque pode gerar dados arbitrários (também porque é o único que suporta NUL bytes em suas variáveis e os argumentos de seus componentes internos) com echo -E - "$data")
Exceto pelo problema de NUL-byte, outras implementações que podem gerar dados arbitrários são o FreeBSD ou o macOS, /bin/echoonde você pode:
/bin/echo "$data
\c"
(nessa implementação, \cé reconhecido apenas no final e nenhuma outra sequência de escape é suportada).
E yashé:
ECHO_STYLE=RAW echo "$data"
(observe que as yashvariáveis podem conter apenas texto, portanto, não sequências de bytes arbitrárias em locais onde nem todas as seqüências de bytes podem formar caracteres válidos, como aqueles que usam UTF-8 como seu mapa de caracteres).
echogeralmente é um shell embutido, mas geralmente existe também/usr/bin/echo. O-enão é POSIX, mas está disponível, por exemplo, com o bash. Dê mais detalhes sobre o que você quer dizer com 'eles ainda não funcionam'. Qual é o comportamento esperado?