Während die offensichtliche, standardmäßige und empfohlene Lösung zu verwenden ist printf, echokann es je nach Implementierung ziemlich schwierig sein , dies zu tun (nicht so schwierig wie zuvor -n).
POSIX.2017-konform echos
POSIX muss echo -e ausgegeben werden -e<newline>. Also ist es einfach
echo -e
Dort. POSIX-konforme echos in dieser Hinsicht (die meisten von ihnen sind in anderer Hinsicht nicht POSIX-konform, die POSIX-Spezifikation ist nahezu nutzlos, wenn es darum geht echo) umfassen:
- die
echobuiltin der , bashwenn sowohl die xpg_echound posixOptionen haben (zur Laufzeit oder Build - Zeit wie für die aktiviert wurde /bin/shvon Apple MacOS). set -o posix; shopt -s xpg_echo(Die posixOption kann auch aktiviert werden, wenn sie als shoder wann POSIXLY_CORRECToder SHELLOPTS=posixin der Umgebung aufgerufen wird.)
- die
/bin/echovon zertifizierten UNIX-Systemen (mindestens AIX, macOS, Solaris) und den meisten BSDs
- das
echoeingebaute von dash, ksh88die Bourne-Muschel, csh, tcsh, posh, rc, es, akanga
- GNU
echo( /bin/echoauf GNU-Systemen), wenn POSIXLY_CORRECTes sich in der Umgebung befindet.
- Das
echoeingebaute mkshund einige andere pdksh- Ableitungen, wenn ihre posixOption aktiviert ist.
- die
echoeingebaute der , yashwenn $ECHO_STYLEentweder nicht gesetzt oder eines von SYSV, XSI, BSD, DASH,RAW
Implementierungen, die unterstützen -e
Inklusive echoder Forschung Unix V8 (wo es herkommt), GNU, Busybox, die echobuiltin von bash, zsh, pdkshund Derivate, fisheinige ash-basierte Shells wie busybox shoder die shvon einigen BSDs, neueren Versionen von ksh93(auf einigen Systemen und mit einigen Werten von $PATH) mit ihren Standardeinstellungen, yashmit $ECHO_STYLEeiner von GNUoder ZSH:
echo -e '-e\n\c'
Die Implementierungen, die -eausnahmslos unterstützen -n, unterstützen also:
echo -ne '-e\n'
würde auch funktionieren.
zsh
zsh's echoist die einzige mir bekannte Implementierung, die einen End-of-Option-Marker ( -) unterstützt.
echo - -e
Damit ist es die einzige Bourne-ähnliche Shell echo, die beliebige Daten ausgeben kann (auch weil es die einzige ist, die NUL-Bytes in ihren Variablen und den Argumenten ihrer integrierten Funktionen unterstützt echo -E - "$data").
Mit Ausnahme des NUL-Byte-Problems sind andere Implementierungen, die beliebige Daten ausgeben können, FreeBSD oder macOS, /bin/echowo Sie Folgendes tun können:
/bin/echo "$data
\c"
(wird in dieser Implementierung \cerst am Ende erkannt und es wird keine andere Escape-Sequenz unterstützt).
Und yash's:
ECHO_STYLE=RAW echo "$data"
(Beachten Sie jedoch, dass yashVariablen nur Text enthalten können, also keine beliebigen Bytesequenzen in Gebietsschemas, in denen nicht alle Bytesequenzen gültige Zeichen bilden können, wie bei UTF-8 als Charmap).
echoist in der Regel eine Shell eingebaut, aber es gibt in der Regel auch/usr/bin/echo. Das-eist nicht POSIX, aber zB mit Bash erhältlich. Bitte geben Sie mehr Details an, was Sie mit "sie funktionieren immer noch nicht" meinen. Was ist das erwartete Verhalten?