Si bien la solución obvia, estándar y recomendada es usar printf
, hacerlo echo
puede ser bastante complicado dependiendo de la implementación ( -n
aunque no tanto como para ).
POSIX.2017 compatible echo
s
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
echo
de bash
cuándo se han habilitado las opciones xpg_echo
y posix
(en tiempo de ejecución o tiempo de compilación, como el /bin/sh
de Apple macOS). set -o posix; shopt -s xpg_echo
(la posix
opción también se puede habilitar si se invoca como sh
o cuando POSIXLY_CORRECT
o SHELLOPTS=posix
está en el entorno).
- el
/bin/echo
de sistemas UNIX certificados (AIX, macOS, Solaris al menos) y la mayoría de los BSD
- la
echo
construcción de dash
, ksh88
el shell Bourne, csh, tcsh, posh, rc, es, akanga
- GNU
echo
( /bin/echo
en sistemas GNU) cuando POSIXLY_CORRECT
está en el entorno.
- La
echo
construcción de mksh
y algunos otros pdksh-deriva cuando su posix
opción está habilitada.
- la
echo
orden interna de yash
cuando $ECHO_STYLE
es o bien unset o uno de SYSV
, XSI
, BSD
, DASH
,RAW
implementaciones que soportan -e
Incluye echo
la investigación de Unix V8 (de donde viene), GNU, busybox, la echo
orden interna de bash
, zsh
, pdksh
y sus derivados, fish
algunos ash
proyectiles basados como busybox sh
o la sh
de algunos BSD, las versiones recientes de ksh93
(en algunos sistemas, y con unos valores de $PATH
) con su configuración predeterminada, yash
con $ECHO_STYLE
uno de GNU
o ZSH
:
echo -e '-e\n\c'
Las implementaciones que soportan -e
invariablemente soportan -n
, entonces:
echo -ne '-e\n'
funcionaría también
zsh
zsh
's echo
es 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 echo
que 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/echo
donde puede hacer:
/bin/echo "$data
\c"
(en esa implementación, \c
solo 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 yash
variables 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).
echo
es generalmente una concha incorporada, pero generalmente también existe/usr/bin/echo
. El-e
no 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?