Wie drucke ich „-e“ mit Echo?

Wie drucke ich „-e“ mit Echo?

Ich weiß, dass das echo -ekein normaler Befehl ist. Ich habe es versucht echo '-e', echo \-eaber es funktioniert immer noch nicht.

Antwort1

Die beste Lösung besteht darin, nicht zu verwenden echo, sondern printfstattdessen zu verwenden.

printf '%s\n' -e

Dies funktioniert mit beliebigen Variablen:

var=-e
printf '%s\n' "$var"

... das bedeutet, dass Sie an keiner anderen Stelle Ihres Codes besondere Vorbereitungen/Änderungen vornehmen müssen, weil Sie wissen, dass ein Wert echod sein wird.


Übrigens,die POSIX-Shell-Befehlsspezifikation fürechoerkennt an, dass es in der implementierten Form nicht portierbar ist, und enthält einen Hinweis zu diesem Thema:

Es ist nicht möglich, echo portabel auf allen POSIX-Systemen zu verwenden, es sei denn, sowohl -n (als erstes Argument) als auch Escape-Sequenzen werden weggelassen.

Das Dienstprogramm printf kann portabel verwendet werden, um alle herkömmlichen Verhaltensweisen des Dienstprogramms echo wie folgt zu emulieren (vorausgesetzt, IFS hat seinen Standardwert oder ist nicht festgelegt):

Das historische System V-Echo und die Anforderungen an XSI-Implementierungen in diesem Band von POSIX.1-2008 entsprechen:

printf "%b\n" "$*"

Das BSD-Echo entspricht:

if [ "X$1" = "X-n" ]
then
    shift
    printf "%s" "$*"
else
    printf "%s\n" "$*"
fi

Neuen Anwendungen wird empfohlen, printf statt echo zu verwenden.

(Betonung hinzugefügt).


Allerdings gibt es auf GNU-Systemen eine Alternative: die Anforderung eines standardkonformen Verhaltens.

$ POSIXLY_CORRECT=1 /bin/echo -e
-e

Antwort2

  • mit Zeilenumbruch

    echo -en '-e\n'
    
  • ohne Zeilenumbruch

    echo -e '-e\c'
    
  • mit Leerzeichen drumherum:

    echo '-e '
    echo ' -e'
    
  • mit der Rücktaste (danke an Joseph R.):

    echo -e ' \b-e'
    

    (es gibt SPC BS – e LF aus, aber wenn es an ein Terminal gesendet wird, das als -eBS gerendert wird, bewegt es den Cursor eine Spalte nach links zurück, wodurch -das SPC überschrieben wird)

Das Verhalten des integrierten Elements bashvon echokann von der Bash-Version abhängen. Es hängt auch von der Umgebung ( POSIXLY_CORRECT, SHELLOPTSund BASHOPTSVariablen), den Optionen ( posix, xpg_echo), den Build-Optionen und argv[0]( shvs bash) ab. Hier getestet mit GNU bash 4.2.53(1), Standard-Build, Standardoptionen, leerer Umgebung, aufgerufen als bash. Funktioniert auch mit zsh 5.0.5.

Antwort3

Bei GNU echomit -eden ASCII-Codes für die Zeichen:

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

055ist die oktale ASCII-Zahl für -(siehe man asciizur Kurzreferenz).

Antwort4

Verwenden Sie -n, um eine neue Zeile zu vermeiden:

$ echo -n - && echo e
-e

verwandte Informationen