Anda dapat mengalihkan semua yang Anda inginkan echo
tetapi tidak akan melakukan apa-apa dengannya. echo
tidak membaca input standarnya. Yang dilakukannya hanyalah menulis ke output standar, argumennya dipisahkan oleh karakter spasi dan diakhiri oleh karakter baris baru (dan dengan beberapa echo
implementasi dengan beberapa urutan escape di dalamnya diperluas dan / atau argumen dimulai dengan -
kemungkinan diperlakukan sebagai opsi).
Jika Anda ingin echo
menampilkan 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 cat
perintah, dan echo
menambahkan 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. yash
juga akan menghapus byte yang tidak membentuk bagian dari karakter yang valid.
Jika alasan karena ingin melakukan itu adalah karena Anda ingin echo
memperluas \n
, \b
, \0351
... escape sequence dalam file (seperti conformant UNIX echo
implementasi lakukan, tetapi tidak semua ), maka Anda lebih suka menggunakan printf
gantinya :
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
, zsh
dan bash
, satu juga dapat melakukan:$(<file)
. Itu adalah operator khusus di mana shell sebagai lawan cat
membaca 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
?