Si bien la solución obvia, estándar y recomendada es usar printf, hacerlo echopuede ser bastante complicado dependiendo de la implementación ( -naunque no tanto como para ).
POSIX.2017 compatible echos
POSIX requiere echo -e salida -e<newline>. Entonces es solo
echo -e
allí. En este sentido, los compatibles con POSIX echo(la mayoría de ellos no son compatibles con POSIX en otros aspectos, la especificación POSIX es casi inútil cuando se trata de echo) incluyen:
- La función
echode bashcuándo se han habilitado las opciones xpg_echoy posix(en tiempo de ejecución o tiempo de compilación, como el /bin/shde Apple macOS). set -o posix; shopt -s xpg_echo(la posixopción también se puede habilitar si se invoca como sho cuando POSIXLY_CORRECTo SHELLOPTS=posixestá en el entorno).
- el
/bin/echode sistemas UNIX certificados (AIX, macOS, Solaris al menos) y la mayoría de los BSD
- la
echoconstrucción de dash, ksh88el shell Bourne, csh, tcsh, posh, rc, es, akanga
- GNU
echo( /bin/echoen sistemas GNU) cuando POSIXLY_CORRECTestá en el entorno.
- La
echoconstrucción de mkshy algunos otros pdksh-deriva cuando su posixopción está habilitada.
- la
echoorden interna de yashcuando $ECHO_STYLEes o bien unset o uno de SYSV, XSI, BSD, DASH,RAW
implementaciones que soportan -e
Incluye echola investigación de Unix V8 (de donde viene), GNU, busybox, la echoorden interna de bash, zsh, pdkshy sus derivados, fishalgunos ashproyectiles basados como busybox sho la shde algunos BSD, las versiones recientes de ksh93(en algunos sistemas, y con unos valores de $PATH) con su configuración predeterminada, yashcon $ECHO_STYLEuno de GNUo ZSH:
echo -e '-e\n\c'
Las implementaciones que soportan -einvariablemente soportan -n, entonces:
echo -ne '-e\n'
funcionaría también
zsh
zsh's echoes la única aplicación que sé que soporta un marcador de fin de opción ( -).
echo - -e
Convirtiéndolo en el único shell tipo Bourne echoque puede generar datos arbitrarios (también porque es el único que admite bytes NUL en sus variables y los argumentos de sus incorporados) con echo -E - "$data")
Excepto por el problema de NUL-byte, otras implementaciones que pueden generar datos arbitrarios son FreeBSD o macOS /bin/echodonde puede hacer:
/bin/echo "$data
\c"
(en esa implementación, \csolo se reconoce al final y no se admite ninguna otra secuencia de escape).
Y yash's:
ECHO_STYLE=RAW echo "$data"
(aunque tenga en cuenta que las yashvariables solo pueden contener texto, por lo tanto, no secuencias de bytes arbitrarias en entornos locales donde no todas las secuencias de bytes pueden formar caracteres válidos como en aquellos que usan UTF-8 como su mapa de caracteres).
echoes generalmente una concha incorporada, pero generalmente también existe/usr/bin/echo. El-eno es POSIX, pero está disponible, por ejemplo, con bash. Proporcione más detalles de lo que quiere decir con "todavía no funcionan". ¿Cuál es el comportamiento esperado?