Mir ist gerade aufgefallen, dass es den Anschein hat, dass das Flag -e
für den echo
Befehl in meiner Shell unter Linux nicht vorhanden ist . Ist das nur eine vermasselte Einstellung oder ist es "normal"?
Code als Beispiel:
#!/bin/sh
echo -e "\e[3;12r\e[3H"
Drucke:
-e \e[3;12r\e[3H
Das hat schon mal geklappt! Ich denke, einige stty
Befehle sind furchtbar schief gelaufen und jetzt funktioniert es nicht mehr. Jemand schlug vor, dass meine sh
tatsächlich gerecht war bash
.
shell
escape-characters
echo
BrainStone
quelle
quelle
echo
eingebaute/bin/sh
Shell, wie siedash
im Debian-Paket enthalten ist (ein Betriebssystem, das Linux oder FreeBSD als Kernel haben kann).Antworten:
Da Sie
sh
nicht verwendet habenbash
, hat derecho
Befehl insh
keine Option-e
. Aus dersh
Manpage:Und das hat es auch nicht
\e
:quelle
sh
Unterstützung für mehrere Implementierungenecho -e
, bei der Kompilierungbash
kann angegeben werden, dass diese nicht unterstützt werden sollenecho -e
. Es ist nur so, dass diese bestimmte sh (wahrscheinlichdash
) nicht unterstützt,-e
während diese bestimmtebash
tut.-e
ist nicht POSIX (tatsächlich akzeptiert POSIX-Echo im Allgemeinen keine Optionen (wird jedoch unterstützt-n
), siehe hier ), und/bin/sh
auf Ihrem System scheint es sich um eine POSIX-Shell zu handeln.-e
ist eine Erweiterung, die in einigen Shells akzeptiert wird, aber Sie sollten sich nicht darauf verlassen, sie ist nicht portabel. Verwenden Sie im Idealfallprintf
oder wechseln Sie zu einer Shell, die hatecho -e
.Beachten Sie auch die Einschränkungen
\e
in den Kommentaren unten, die durch ersetzt werden sollten\033
.quelle
sh
erkennt er es auch nicht\e
. Verwendung\033
Beachten Sie, dass Sie jederzeit und in fast jeder Shell herausfinden können, welches "Echo" aufgerufen wird, indem Sie
type echo
oder eingebenwhich echo
. Es ist normalerweise eine eingebaute Shell. Es kommt also darauf an, welches "Echo" installiert ist und welche Shell Sie verwenden.quelle
which echo
Sollte dies nicht verwendet werden, wird es Ihnen wahrscheinlich nicht sagen, ob Sie ein eingebautes Programm verwenden, dawhich
es sich normalerweise um ein externes Binärprogramm handelt.type
ist aber gut.type which
oder enthülltwhich which
). ;)