Puoi reindirizzare tutto ciò che vuoi, echoma non farà nulla con esso. echonon 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 echoimplementazioni con alcune sequenze di escape in esse espanse e / o argomenti che iniziano con -eventualmente trattati come opzioni).
Se si desidera echovisualizzare 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 catcomando, e echoaggiunge 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. yashrimuoverà anche i byte che non fanno parte di caratteri validi.
Se il motivo per voler fare questo è perché si vuole echoper espandere il \n, \b, \0351... sequenze di escape nel file (come UNIX conformant echoimplementazioni fanno, ma non tutti ), allora si preferisce utilizzare printfinvece :
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, zshe bash, si può anche fare:$(<file) . Questo è un operatore speciale per cui la shell invece di catleggere 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?