Sie können alles umleiten, was Sie wollen, echo
aber es wird nichts damit anfangen. echo
liest seine Standardeingabe nicht. Es wird lediglich in die Standardausgabe geschrieben, wobei die Argumente durch ein Leerzeichen getrennt und durch ein Zeilenumbruchzeichen abgeschlossen werden (und bei einigen echo
Implementierungen werden einige Escape-Sequenzen darin erweitert und / oder Argumente beginnen mit -
möglicherweise als Optionen behandelten).
Wenn Sie echo
den Inhalt einer Datei anzeigen möchten , müssen Sie diesen Inhalt als Argument an übergeben echo
. So etwas wie:
echo "$(cat my_file.txt)"
Beachten Sie, dass $(...)
die hinteren Neue - Zeile - Zeichenstreifen s vom Ausgang dieses cat
Befehls, und echo
fügt einen Rücken.
Beachten zsh
Sie auch, dass Sie mit Ausnahme von with keine NUL-Zeichen in den Argumenten eines Befehls übergeben können, sodass die oben genannten normalerweise nicht mit Binärdateien funktionieren. yash
entfernt auch Bytes, die nicht Teil gültiger Zeichen sind.
Wenn der Grund für den Wunsch , das zu tun ist , weil Sie wollen echo
das erweitern \n
, \b
, \0351
... Escape - Sequenzen in der Datei (wie UNIX - konforme echo
Implementierungen zu tun, aber nicht alle ), dann würden Sie lieber verwenden printf
statt :
printf '%b\n' "$(cat my_file.txt)"
Im Gegensatz dazu echo
ist diese portabel und hat keine Probleme, wenn der Inhalt der Datei mit beginnt -
.
Als Alternative zu $(cat file)
, mit ksh
, zsh
und bash
kann man auch tun:$(<file)
. Dies ist ein spezieller Operator, bei dem die Shell im Gegensatz zum cat
Lesen den Inhalt der Datei liest, um die Erweiterung zu bilden. Es werden weiterhin die nachgestellten Zeilenumbrüche und Drosseln auf NUL-Bytes außer in entfernt zsh
. In bash
, das gabelt noch einen zusätzlichen Prozess. Beachten Sie auch, dass ein Unterschied darin besteht, dass beim Versuch, eine Datei des Typs directory auf diese Weise zu lesen, keine Fehler auftreten. Solange $(< file)
es etwas Besonderes ist, $(< file; other command)
ist es auch nichts ( zsh
wenn Sie keine andere Shell emulieren, würde dies den Inhalt der Shell trotzdem erweitern file
, indem Sie den impliziten $READNULLCMD
Befehl ausführen (normalerweise einen Pager)).
echo
?