Jawaban:
Lebih disukai dan paling banyak digunakan bukanlah hal yang sama. Meskipun printflebih baik karena berbagai alasan, kebanyakan orang masih menggunakan echosintaksisnya lebih sederhana.
Alasan utama mengapa Anda harus memilih printfadalah:
echo tidak dibakukan, itu akan berperilaku berbeda pada sistem yang berbeda.Sulit untuk memprediksi apa yang sebenarnya Anda jalankan saat Anda echo foo. Sebagai ilustrasi, pada sistem Debian saya:
$ type -a echo
echo is a shell builtin
echo is /bin/echo
Seperti yang Anda lihat, ada dua echoperintah yang berbeda , satu adalah shell (bash dalam hal ini) builtin dan yang lainnya adalah biner yang terpisah. Catatan yang bashjuga memiliki printfbuiltin tetapi perilakunya lebih terstandarisasi sehingga kurang menjadi masalah (terima kasih kepada @ RaduRădeanu untuk menunjukkannya).
Karena beberapa (tetapi tidak semua) implementasi dari echoswitch baris perintah dukungan, sulit untuk mencetak string yang dimulai dengan a -. Sementara banyak program mendukung --untuk menandakan akhir switch dan awal argumen (misalnya, grep -- -a fileakan menemukan baris di filedalamnya -a), echotidak. Jadi, bagaimana Anda echomencetak -n?
$ echo -n ## no output
$ echo '-n' ## no output
$ echo "-n" ## no output
$ echo \-n ## no output
$ echo -e '\055n' ## using the ASCII code works but only on implementations
-n ## that support -e
printf dapat melakukan ini dengan mudah:
$ printf -- '-n\n'
-n
$ printf '%s\n' -n
-n
$ printf '\055n\n'
-n
Untuk informasi lebih dari yang Anda ingin tahu mengapa printflebih baik daripada echo, lihat jawaban ini untuk pertanyaan serupa di http://unix.stackexchange.com :
printfpenerjemah yang lebih baik.
printf(lihat type -a).
printflebih kaku didefinisikan dalam POSIX dan saya pikir builtin mengikuti standar yang sama. Sebaliknya, spesifikasi POSIX untuk echokurang ketat dan bahkan secara eksplisit menyatakan bahwa akan ada perbedaan antara implementasi dan yang printfharus dipilih.
echo. Apakah itu benar?
echodaripada printfkarena forma bisa lebih sederhana. Jika Anda tahu apa yang Anda cetak, echo foolebih cepat dan lebih mudah untuk mengetik daripada printf 'foo\n'. Selain itu, ketika menulis skrip di mana variabel perlu dicetak, tidak pernah ada alasan yang baik untuk digunakan echo.
Untuk bertanya mana yang disukai itu sendiri tidak lengkap.
Jika semua yang ingin dilakukan adalah memancarkan satu atau lebih baris teks yang diakhiri oleh baris baru , maka gema cukup. Jika ada sesuatu yang lebih pintar yang dimaksudkan, khususnya termasuk "garis parsial" yang tidak memiliki baris baru, maka printf adalah yang terbaik untuk tujuan itu .
echoimplementasinya, "menghindari baris baru" mudah dilakukan echo -n. Bahkan, -nadalah fitur gema yang paling portabel. Menurut POSIX, tidak ada di SystemV tetapi hadir di sebagian besar Unix.
-nuntuk BSD dan SystemV tetapi hal lain, saya tidak tahu.