Wenn ich die Akte habe, die input.txt
enthält:
hello
world
!
Wenn Sie dann den Befehl bash ausführen, wird Folgendes echo $(cat input.txt)
ausgegeben:
hello world !
Warum und wie kann ich das Problem beheben, um genau das auszugeben, was in der Datei enthalten ist, wie es in der Datei enthalten ist?
command-line
bash
f.ardelian
quelle
quelle
echo "$(date) something"
Dies hat den Vorteil, dass z. B. die nachgestellte Zeile von der Ausgabe des Datums entfernt wird und das Echo das Datum und "etwas" in derselben Zeile ausgibt. Wenn Sie eine Datei oder eine Befehlsausgabe unverändert speichern müssen, verwenden Sie mapfile (help mapfile
)read -rd ''
oder eine while- Leseschleife .Zitat aus der Bash-Handbuchseite, Abschnitt
Command Substitution
:Ein wenig weiter, gleicher Abschnitt:
Deshalb
echo "$(cat /etc/passwd)"
funktioniert.Beachten Sie außerdem , dass durch das Ersetzen von Befehlen durch POSIX-Spezifikationen nachfolgende Zeilenumbrüche entfernt werden:
Das Ausgeben einer Datei über
$(cat file.txt)
kann daher zum Verlust nachgestellter Zeilenumbrüche führen, und dies kann ein Problem sein, wenn die Integrität der gesamten Datei Vorrang hat.quelle
Sie können Zeilenumbrüche beibehalten, indem Sie beispielsweise IFS auf leer setzen:
quelle