Während die offensichtliche, standardmäßige und empfohlene Lösung zu verwenden ist printf
, echo
kann es je nach Implementierung ziemlich schwierig sein , dies zu tun (nicht so schwierig wie zuvor -n
).
POSIX.2017-konform echo
s
POSIX muss echo -e
ausgegeben werden -e<newline>
. Also ist es einfach
echo -e
Dort. POSIX-konforme echo
s 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
echo
builtin der , bash
wenn sowohl die xpg_echo
und posix
Optionen haben (zur Laufzeit oder Build - Zeit wie für die aktiviert wurde /bin/sh
von Apple MacOS). set -o posix; shopt -s xpg_echo
(Die posix
Option kann auch aktiviert werden, wenn sie als sh
oder wann POSIXLY_CORRECT
oder SHELLOPTS=posix
in der Umgebung aufgerufen wird.)
- die
/bin/echo
von zertifizierten UNIX-Systemen (mindestens AIX, macOS, Solaris) und den meisten BSDs
- das
echo
eingebaute von dash
, ksh88
die Bourne-Muschel, csh, tcsh, posh, rc, es, akanga
- GNU
echo
( /bin/echo
auf GNU-Systemen), wenn POSIXLY_CORRECT
es sich in der Umgebung befindet.
- Das
echo
eingebaute mksh
und einige andere pdksh- Ableitungen, wenn ihre posix
Option aktiviert ist.
- die
echo
eingebaute der , yash
wenn $ECHO_STYLE
entweder nicht gesetzt oder eines von SYSV
, XSI
, BSD
, DASH
,RAW
Implementierungen, die unterstützen -e
Inklusive echo
der Forschung Unix V8 (wo es herkommt), GNU, Busybox, die echo
builtin von bash
, zsh
, pdksh
und Derivate, fish
einige ash
-basierte Shells wie busybox sh
oder die sh
von einigen BSDs, neueren Versionen von ksh93
(auf einigen Systemen und mit einigen Werten von $PATH
) mit ihren Standardeinstellungen, yash
mit $ECHO_STYLE
einer von GNU
oder ZSH
:
echo -e '-e\n\c'
Die Implementierungen, die -e
ausnahmslos unterstützen -n
, unterstützen also:
echo -ne '-e\n'
würde auch funktionieren.
zsh
zsh
's echo
ist 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/echo
wo Sie Folgendes tun können:
/bin/echo "$data
\c"
(wird in dieser Implementierung \c
erst am Ende erkannt und es wird keine andere Escape-Sequenz unterstützt).
Und yash
's:
ECHO_STYLE=RAW echo "$data"
(Beachten Sie jedoch, dass yash
Variablen 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).
echo
ist in der Regel eine Shell eingebaut, aber es gibt in der Regel auch/usr/bin/echo
. Das-e
ist 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?