Untuk menampilkan pesan dan mencetak data ada dua perintah yang tersedia printf
dan echo
.
Lalu bagaimana berbeda cara mereka menggunakannya? Mana yang lebih disukai?
command-line
Pandya
sumber
sumber
Jawaban:
Lebih disukai dan paling banyak digunakan bukanlah hal yang sama. Meskipun
printf
lebih baik karena berbagai alasan, kebanyakan orang masih menggunakanecho
sintaksisnya lebih sederhana.Alasan utama mengapa Anda harus memilih
printf
adalah: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:Seperti yang Anda lihat, ada dua
echo
perintah yang berbeda , satu adalah shell (bash dalam hal ini) builtin dan yang lainnya adalah biner yang terpisah. Catatan yangbash
juga memilikiprintf
builtin tetapi perilakunya lebih terstandarisasi sehingga kurang menjadi masalah (terima kasih kepada @ RaduRădeanu untuk menunjukkannya).Karena beberapa (tetapi tidak semua) implementasi dari
echo
switch 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 file
akan menemukan baris difile
dalamnya-a
),echo
tidak. Jadi, bagaimana Andaecho
mencetak-n
?printf
dapat melakukan ini dengan mudah:Untuk informasi lebih dari yang Anda ingin tahu mengapa
printf
lebih baik daripadaecho
, lihat jawaban ini untuk pertanyaan serupa di http://unix.stackexchange.com :/unix//a/65819/22222
sumber
printf
penerjemah yang lebih baik.printf
(lihattype -a
).printf
lebih kaku didefinisikan dalam POSIX dan saya pikir builtin mengikuti standar yang sama. Sebaliknya, spesifikasi POSIX untukecho
kurang ketat dan bahkan secara eksplisit menyatakan bahwa akan ada perbedaan antara implementasi dan yangprintf
harus dipilih.echo
. Apakah itu benar?echo
daripadaprintf
karena forma bisa lebih sederhana. Jika Anda tahu apa yang Anda cetak,echo foo
lebih cepat dan lebih mudah untuk mengetik daripadaprintf 'foo\n'
. Selain itu, ketika menulis skrip di mana variabel perlu dicetak, tidak pernah ada alasan yang baik untuk digunakanecho
.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 .
sumber
echo
implementasinya, "menghindari baris baru" mudah dilakukanecho -n
. Bahkan,-n
adalah fitur gema yang paling portabel. Menurut POSIX, tidak ada di SystemV tetapi hadir di sebagian besar Unix.-n
untuk BSD dan SystemV tetapi hal lain, saya tidak tahu.