Puoi reindirizzare tutto ciò che vuoi, echo
ma non farà nulla con esso. echo
non legge il suo input standard. Tutto ciò che fa è scrivere nell'output standard i suoi argomenti separati da un carattere spazio e terminati da un carattere di nuova riga (e con alcune echo
implementazioni con alcune sequenze di escape in esse espanse e / o argomenti che iniziano con -
eventualmente trattati come opzioni).
Se si desidera echo
visualizzare il contenuto di un file, è necessario passare tale contenuto come argomento a echo
. Qualcosa di simile a:
echo "$(cat my_file.txt)"
Notare che $(...)
spoglia il carattere newline finale s dall'output di tale cat
comando, e echo
aggiunge uno schienale.
Si noti inoltre che, tranne con zsh
, non è possibile passare caratteri NUL negli argomenti di un comando, quindi in genere in genere non funzionerà con i file binari. yash
rimuoverà anche i byte che non fanno parte di caratteri validi.
Se il motivo per voler fare questo è perché si vuole echo
per espandere il \n
, \b
, \0351
... sequenze di escape nel file (come UNIX conformant echo
implementazioni fanno, ma non tutti ), allora si preferisce utilizzare printf
invece :
printf '%b\n' "$(cat my_file.txt)"
Al contrario echo
, quello è portatile e non avrà problemi se il contenuto del file inizia con -
.
In alternativa al $(cat file)
, con ksh
, zsh
e bash
, si può anche fare:$(<file)
. Questo è un operatore speciale per cui la shell invece di cat
leggere il contenuto del file per compensare l'espansione. Rimuove ancora le nuove righe finali e soffoca sui byte NUL tranne in zsh
. In bash
, che ancora forgia un ulteriore processo. Si noti inoltre che una differenza è che non si otterrà alcun errore se si tenta di leggere un file di tipo directory in quel modo. Inoltre, sebbene $(< file)
sia speciale, $(< file; other command)
non lo è (in zsh
, quando non si emula un'altra shell, che espande comunque il contenuto di file
, eseguendo il comando implicito $READNULLCMD
(in genere un cercapersone)).
echo
?