Sie können alles umleiten, was Sie wollen, echoaber es wird nichts damit anfangen. echoliest 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 echoImplementierungen werden einige Escape-Sequenzen darin erweitert und / oder Argumente beginnen mit -möglicherweise als Optionen behandelten).
Wenn Sie echoden 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 catBefehls, und echofügt einen Rücken.
Beachten zshSie 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. yashentfernt auch Bytes, die nicht Teil gültiger Zeichen sind.
Wenn der Grund für den Wunsch , das zu tun ist , weil Sie wollen echodas erweitern \n, \b, \0351... Escape - Sequenzen in der Datei (wie UNIX - konforme echoImplementierungen zu tun, aber nicht alle ), dann würden Sie lieber verwenden printfstatt :
printf '%b\n' "$(cat my_file.txt)"
Im Gegensatz dazu echoist diese portabel und hat keine Probleme, wenn der Inhalt der Datei mit beginnt -.
Als Alternative zu $(cat file), mit ksh, zshund bashkann man auch tun:$(<file) . Dies ist ein spezieller Operator, bei dem die Shell im Gegensatz zum catLesen 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 ( zshwenn 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?