
Ich weiß, dass das echo -e
kein normaler Befehl ist. Ich habe es versucht echo '-e'
, echo \-e
aber es funktioniert immer noch nicht.
Antwort1
Die beste Lösung besteht darin, nicht zu verwenden echo
, sondern printf
stattdessen 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 echo
d sein wird.
Übrigens,die POSIX-Shell-Befehlsspezifikation fürecho
erkennt 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
-e
BS gerendert wird, bewegt es den Cursor eine Spalte nach links zurück, wodurch-
das SPC überschrieben wird)
Das Verhalten des integrierten Elements bash
von echo
kann von der Bash-Version abhängen. Es hängt auch von der Umgebung ( POSIXLY_CORRECT
, SHELLOPTS
und BASHOPTS
Variablen), den Optionen ( posix
, xpg_echo
), den Build-Optionen und argv[0]
( sh
vs 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 echo
mit -e
den ASCII-Codes für die Zeichen:
$ /bin/echo -e '\055'e
-e
055
ist die oktale ASCII-Zahl für -
(siehe man ascii
zur Kurzreferenz).
Antwort4
Verwenden Sie -n
, um eine neue Zeile zu vermeiden:
$ echo -n - && echo e
-e