¿Cómo imprimo '-e' con eco?

¿Cómo imprimo '-e' con eco?

Sé que echo -eno es una orden ordinaria. Lo he intentado echo '-e'y echo \-etodavía no funcionan.

Respuesta1

La mejor solución no es utilizar echo, sino utilizar printfen 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á echod.


De paso,la especificación del comando de shell POSIX paraechoreconoce 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 -eBS, mueve el cursor hacia atrás una columna hacia la izquierda, lo que provoca -que se sobrescriba el SPC)

El comportamiento del bashincorporado echopuede depender de la versión de bash. También depende del entorno ( POSIXLY_CORRECT, SHELLOPTSy BASHOPTSvariables), las opciones ( posix, xpg_echo), las opciones de compilación y argv[0]( shvs 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 -econ los códigos ASCII para los caracteres:

$ /bin/echo -e '\055'e
-e

055es el número octal ASCII para -(consulte man asciila referencia rápida).

Respuesta4

Úselo -npara evitar nuevas líneas:

$ echo -n - && echo e
-e

información relacionada