
Sé que echo -e
no es una orden ordinaria. Lo he intentado echo '-e'
y echo \-e
todavía no funcionan.
Respuesta1
La mejor solución no es utilizar echo
, sino utilizar printf
en su lugar.
printf '%s\n' -e
Esto funciona con variables arbitrarias:
var=-e
printf '%s\n' "$var"
...lo que significa que no necesita realizar ninguna preparación/modificación especial en ninguna otra parte de su código basándose en el conocimiento de que un valor será echo
d.
De paso,la especificación del comando de shell POSIX paraecho
reconoce que no es portátil tal como está implementado y contiene una nota al respecto:
No es posible utilizar echo de forma portátil en todos los sistemas POSIX a menos que se omitan tanto -n (como primer argumento) como las secuencias de escape.
La utilidad printf se puede utilizar de forma portátil para emular cualquiera de los comportamientos tradicionales de la utilidad echo de la siguiente manera (suponiendo que IFS tenga su valor estándar o no esté configurado):
El eco histórico del Sistema V y los requisitos sobre implementaciones XSI en este volumen de POSIX.1-2008 son equivalentes a:
printf "%b\n" "$*"
El eco BSD es equivalente a:
if [ "X$1" = "X-n" ] then shift printf "%s" "$*" else printf "%s\n" "$*" fi
Se recomienda que las nuevas aplicaciones utilicen printf en lugar de echo.
(Énfasis añadido).
Dicho esto, en los sistemas GNU existe una alternativa: solicitar un comportamiento compatible con los estándares.
$ POSIXLY_CORRECT=1 /bin/echo -e
-e
Respuesta2
con nueva línea
echo -en '-e\n'
sin nueva línea
echo -e '-e\c'
con espacios alrededor:
echo '-e ' echo ' -e'
usando retroceso (gracias a Joseph R.):
echo -e ' \b-e'
(genera SPC BS - e LF, pero cuando se envía a una terminal que se representa como
-e
BS, mueve el cursor hacia atrás una columna hacia la izquierda, lo que provoca-
que se sobrescriba el SPC)
El comportamiento del bash
incorporado echo
puede depender de la versión de bash. También depende del entorno ( POSIXLY_CORRECT
, SHELLOPTS
y BASHOPTS
variables), las opciones ( posix
, xpg_echo
), las opciones de compilación y argv[0]
( sh
vs bash
). Aquí probado con GNU bash 4.2.53(1)
, compilación predeterminada, opciones predeterminadas, entorno vacío, invocado como bash
. Funciona también con zsh 5.0.5
.
Respuesta3
Con GNU echo
's -e
con los códigos ASCII para los caracteres:
$ /bin/echo -e '\055'e
-e
055
es el número octal ASCII para -
(consulte man ascii
la referencia rápida).
Respuesta4
Úselo -n
para evitar nuevas líneas:
$ echo -n - && echo e
-e