Bien que la solution évidente, standard et recommandée soit à utiliser printf, le faire avec echopeut être assez délicat en fonction de l'implémentation (pas aussi délicat que pour-n ).
Conforme à POSIX.2017 echo s
POSIX nécessite echo -e une sortie -e<newline>. Donc c'est juste
echo -e
Là. Les POSIX conformes echoà cet égard (la plupart d'entre eux ne sont pas conformes à POSIX à d'autres égards, la spécification POSIX est presque inutile en ce qui concerne echo):
- la fonction
echointégrée bashlorsque les options xpg_echoet posixsont activées (au moment de l'exécution ou de la construction, comme pour /bin/shApple macOS). set -o posix; shopt -s xpg_echo(l' posixoption peut également être activée si elle est invoquée en tant que shou quand POSIXLY_CORRECTouSHELLOPTS=posix dans l'environnement).
- le
/bin/echo systèmes UNIX certifiés (AIX, MacOS, Solaris au moins) et la plupart des BSDs
- la
echoconstruction de dash,ksh88 le shell Bourne, csh, tcsh, chic, rc, es, akanga
- GNU
echo( /bin/echosur les systèmes GNU) lorsquePOSIXLY_CORRECT est dans l'environnement.
- la commande
echointégrée mkshet certains autres dérivés de pdksh lorsque leur posixoption est activée.
- la
echocommande interne de yashquand $ECHO_STYLEest soit inexistant ou l' un de SYSV, XSI, BSD, DASH,RAW
implémentations qui prennent en charge -e
Comprend echode la recherche V8 Unix (où il vient), GNU, busybox, le echobuiltin de bash, zsh, pdkshet ses dérivés, fishcertains ashcoquillages comme à base busybox shou shde quelques BSDs, les versions récentes de ksh93(sur certains systèmes, et avec des valeurs de $PATH) avec leurs paramètres par défaut, yashavec l' $ECHO_STYLEun GNUou ZSH:
echo -e '-e\n\c'
Les implémentations qui prennent en -echarge prennent toujours en charge -n, donc:
echo -ne '-e\n'
fonctionnerait aussi bien.
zsh
zsh« s echoest la seule mise en œuvre que je sais que les supports d' un marqueur de fin de l' option ( -).
echo - -e
Ce qui en fait le seul shell de type Bourne echocapable de produire des données arbitraires (également parce que c'est le seul qui prend en charge les octets NUL dans ses variables et les arguments de ses commandes) avececho -E - "$data" )
À l'exception du problème d'octets NUL, les autres implémentations qui peuvent générer des données arbitraires sont FreeBSD ou macOS /bin/echooù vous pouvez faire:
/bin/echo "$data
\c"
(dans cette mise en œuvre, \c n'est reconnu qu'à la fin, et aucune autre séquence d'échappement n'est prise en charge).
Et c'est yash:
ECHO_STYLE=RAW echo "$data"
(mais notez que les yashvariables ne peuvent contenir que du texte, donc pas de séquences d'octets arbitraires dans les locales où toutes les séquences d'octets ne peuvent pas former des caractères valides comme dans ceux utilisant UTF-8 comme leur charmap).
echoest généralement un shell intégré, mais il y en a généralement aussi/usr/bin/echo. Le-en'est pas POSIX, mais disponible par exemple avec bash. Veuillez donner plus de détails sur ce que vous entendez par «ils ne fonctionnent toujours pas». Quel est le comportement attendu?