Anda dapat mengalihkan semua yang Anda inginkan echotetapi tidak akan melakukan apa-apa dengannya. echotidak membaca input standarnya. Yang dilakukannya hanyalah menulis ke output standar, argumennya dipisahkan oleh karakter spasi dan diakhiri oleh karakter baris baru (dan dengan beberapa echoimplementasi dengan beberapa urutan escape di dalamnya diperluas dan / atau argumen dimulai dengan -kemungkinan diperlakukan sebagai opsi).
Jika Anda ingin echomenampilkan konten file, Anda harus meneruskan konten itu sebagai argumen echo. Sesuatu seperti:
echo "$(cat my_file.txt)"
Perhatikan bahwa $(...)strip baris baru karakter s dari output dari yang catperintah, dan echomenambahkan satu kembali.
Perhatikan juga bahwa kecuali dengan zsh, Anda tidak dapat melewatkan karakter NUL dalam argumen perintah, sehingga di atas biasanya tidak akan bekerja dengan file biner. yashjuga akan menghapus byte yang tidak membentuk bagian dari karakter yang valid.
Jika alasan karena ingin melakukan itu adalah karena Anda ingin echomemperluas \n, \b, \0351... escape sequence dalam file (seperti conformant UNIX echoimplementasi lakukan, tetapi tidak semua ), maka Anda lebih suka menggunakan printfgantinya :
printf '%b\n' "$(cat my_file.txt)"
Berlawanan dengan itu echo, yang portabel dan tidak akan memiliki masalah jika konten file dimulai -.
Sebagai alternatif untuk $(cat file), dengan ksh, zshdan bash, satu juga dapat melakukan:$(<file) . Itu adalah operator khusus di mana shell sebagai lawan catmembaca konten file untuk membuat ekspansi. Masih menghapus baris baru yang tertinggal dan tersedak pada byte NUL kecuali pada zsh. Dalam bash, itu masih membutuhkan proses tambahan. Juga perhatikan bahwa satu perbedaan adalah bahwa Anda tidak akan mendapatkan kesalahan jika mencoba membaca file direktori jenis seperti itu. Selain itu, meskipun $(< file)spesial, $(< file; other command)tidak (dalam zsh, ketika tidak meniru shell lain, itu masih akan memperluas konten file, dengan menjalankan perintah implisit $READNULLCMD (biasanya pager)).
echo?