Ich habe ein Bash-Skript, das viele echo
Anweisungen enthält, und ich habe auch einen Alias echo
für echo -e
beide in .bash_profile
und .bashrc
, damit neue Zeilen für eine Anweisung, wie sie echo 'Hello\nWorld'
ausgegeben werden soll, richtig gedruckt werden
Hello
World
aber die Ausgabe, die ich bekomme, ist
Hello\nWorld
Ich habe sogar versucht, shopt -s expand_aliases
das Skript zu verwenden, es hilft nicht
Ich führe mein Skript aus als bash /scripts/scriptnm.sh
; Wenn ich es ausführe, bekomme . /scripts/scriptnm.sh
ich die gewünschte Ausgabe ...
echo
wie Sie wollen ist eine schlechte Praxis IMHOAntworten:
Die gemischte Historie von
echo
bedeutet, dass die Standardoperation von Shell zu Shell variiert. POSIX gibt an, dass das Ergebnis vonecho
"implementierungsdefiniert" ist, wenn das erste Argument ist-n
oder ein Argument einen Backslash enthält.Es ist zuverlässiger zu verwenden
printf
(entweder als integrierter Befehl oder als externer Befehl), wenn das Verhalten genauer definiert ist: Der Backslash im C-Stil wird ausgeblendet und Formatspezifizierer werden in der Formatzeichenfolge (dem ersten Argument) unterstützt.Sie können die Erweiterung von Backslash - Escape - Sequenzen von steuern bash ‚s
echo
integrierten Befehl mit derxpg_echo
Shell - Option.Setzen Sie es oben in einem Bash- Skript, damit
echo
Backslash-Escapezeichen automatisch erweitert werden, ohne dass-e
zu jedem Echo-Befehl etwas hinzugefügt werden muss.quelle
Bei Verwendung
bash myfile.sh
wird Bash im Batch-Modus in einem separaten Prozess ausgeführt und liest weder das Profil noch die RC-Datei.Wenn Sie verwenden
. myfile.sh
, wird die Datei stammt von dem aktuellen Shell - Prozess (als wenn der Inhalt von Ihnen eingegeben wurde), deshalb sieht es Ihre derzeit Aliase definiert.Im Allgemeinen ist es eine sehr schlechte Idee, Skripte zu schreiben, die von einer bestimmten Shell-Konfiguration abhängen, insbesondere von Aliasen, es sei denn, Sie definieren sie im Skript selbst. ( Verlassen Sie sich niemals auf Benutzer
.bashrc
, auch wenn es Ihre eigenen sind.)quelle
Es wird empfohlen,
printf
alle neuen Skripte zu verwenden.quelle
Dies funktioniert gut im Terminal
Speichern Sie in einer Datei und machen Sie sie ausführbar (chmod + x)
Führen Sie als ./Ihre_Datei aus
quelle