Cara Menggunakan Perintah Bash printf di Linux
Diterbitkan: 2022-06-25 Perintah Bash printf
memungkinkan Anda menulis ke jendela terminal Linux dengan kontrol yang lebih baik dan lebih banyak opsi pemformatan daripada yang disediakan oleh perintah echo
. Bahkan kebiasaan aneh printf
bisa berguna.
Menulis ke Terminal
Ini adalah salah satu bagian paling dasar dari interaksi dengan sebuah program. Program menulis sesuatu ke layar, dan Anda membacanya. Bahkan dengan mempertimbangkan konvensi program baris perintah yang diturunkan dari Unix dan Linux yang dibuat sesingkat mungkin—banyak yang hanya menulis ke terminal jika terjadi kesalahan. Memberi tahu pengguna apa yang sedang terjadi, atau akan terjadi, atau baru saja terjadi adalah primitif pemrograman yang penting.
Bash shell memiliki perintah echo
yang dapat menulis teks ke jendela terminal. Itu dapat menangani variabel dan menampilkan nilainya jika disertakan dalam string, dan Anda dapat menggunakannya dalam skrip atau pada baris perintah. Jadi mengapa printf
bahkan ada? Bukankah echo
memiliki hal penulisan teks yang tercakup? Nah, printf
menawarkan fungsionalitas di luar tindakan penulisan string biasa ke jendela terminal. Ini memungkinkan Anda untuk memformat output dengan fleksibilitas tinggi, dan memiliki trik lain juga.
Perintah Bash printf
dimodelkan pada fungsi printf
dari bahasa C, tetapi ada perbedaan. Jika Anda tahu C, Anda harus mewaspadai perbedaan tersebut.
Menulis String Dasar
Mari kita lihat bagaimana echo
dan printf
berbeda ketika mereka menulis string ke terminal.
gema di sini adalah beberapa kata
printf di sini ada beberapa kata
Perintah echo
mencetak semua kata tetapi printf
hanya mencetak kata pertama. Juga, tidak ada baris baru yang dicetak oleh printf
. Outputnya berhadapan langsung dengan command prompt. Tapi, hal pertama yang pertama, agar printf
bertindak pada semua kata, mereka perlu dikutip.
gema di sini adalah beberapa kata
printf "ini beberapa kata"
Itu lebih baik. Kami memiliki semua kata yang sedang dicetak tetapi kami masih belum mendapatkan baris baru. Itu karena dengan printf
Anda hanya mendapatkan baris baru jika Anda memintanya. Itu mungkin tampak sulit, tetapi itu memungkinkan Anda memutuskan apakah akan memasukkannya atau tidak. Untuk menyebabkan printf
mengeluarkan baris baru, Anda harus menyertakan " \n
" dalam string Anda. Ini adalah urutan pelarian "baris baru".
gema di sini adalah beberapa kata
printf "ini beberapa kata\n"
Terkadang Anda akan menggunakan baris baru dan terkadang tidak. Inilah kasus di mana satu pernyataan printf
menggunakan baris baru dan yang lainnya tidak.
printf "Caranya" && printf "Geek\n"
Karena printf
pertama tidak mencetak baris baru, output dari printf
kedua ditempatkan tepat setelah "How-To" dan pada baris yang sama. printf
kedua menggunakan \n
untuk mencetak baris baru. Ini membuat prompt perintah muncul pada baris di bawah teks yang dicetak.
TERKAIT: Cara Memproses File Baris demi Baris dalam Script Bash Linux
Karakter Escape Lainnya
Berikut adalah beberapa karakter pelarian lainnya yang dapat Anda gunakan. Anda telah melihat “ \n
” beraksi.
- \n : Pindah ke baris baru.
- \r : Mencetak carriage return. Ini mengirimkan kursor output kembali ke awal baris saat ini.
- \t : Mencetak karakter tab.
- \v : mencetak ruang tab vertikal.
- \\ : Mencetak karakter garis miring terbalik.
- \" : Mencetak karakter kutipan.
- \b : Mencetak karakter spasi mundur.
Karakter carriage return escape memindahkan kursor kembali ke awal baris saat ini .
printf "Madu adalah akar dari segala kejahatan\rUang\n"
Perintah printf
memproses inputnya dari kiri ke kanan. String dicetak sebagai teks biasa hingga printf
menemukan karakter escape “ \r
”. Kursor keluaran dipindahkan kembali ke awal baris saat ini.
Pemrosesan string dilanjutkan dengan huruf tepat di belakang karakter “ \r
”. Memproses sisanya menyebabkan printf
mencetak "Uang", menimpa kata "Sayang."
Tanda kutip “ "
” digunakan untuk mengutip string, dan karakter garis miring terbalik “ \
” menunjukkan urutan escape. Jika Anda ingin mencetak karakter ini, Anda perlu menghindarinya dengan garis miring terbalik. Ini memberitahu printf
untuk memperlakukannya sebagai karakter literal.
printf "Ini adalah \tTab, ini adalah tanda kutip \", dan \\ ini adalah Backslash\n"
Menggunakan Variabel
Menggunakan variabel dengan printf
sangat mirip dengan menggunakannya dengan echo
. Untuk memasukkan variabel, seperti variabel lingkungan ini, awali dengan tanda dolar “ $
” seperti biasa.
printf "Direktori beranda: $HOME\n"
TERKAIT: Cara Bekerja dengan Variabel di Bash
Format String
Format string adalah string yang menentukan format output. Anda memberikan teks dan nilai lain sebagai argumen untuk string format yang akan dioperasikan.
String format dapat menyertakan teks, escape sequence, dan format specifier . Penentu format memberi tahu printf
jenis argumen apa yang diharapkan, seperti string, bilangan bulat, atau karakter.
Ini adalah penentu format yang paling umum. Semuanya didahului dengan tanda persen “ %
”. Untuk mencetak tanda persen, Anda menggunakan tanda dua persen bersama-sama “ %%
.”
- %s : Mencetak string.
- %c : Mencetak satu karakter.
- %d : Mencetak bilangan bulat.
- %f : mencetak angka floating point.
- %u : Mencetak bilangan bulat yang tidak ditandatangani.
- %o : Mencetak nilai dalam oktal.
- %x : Mencetak nilai dalam heksadesimal, dalam huruf kecil.
- %X : Mencetak nilai dalam heksadesimal, dalam huruf besar.
- %e : Mencetak angka floating point dalam notasi ilmiah, dalam huruf kecil.
- %E : Mencetak angka floating point dalam notasi ilmiah, dalam huruf besar.
- %% : Mencetak simbol persen “%”.
printf "Caranya %s\n" "Geek"
printf "%s%s %s\n" "Bagaimana" "-Ke" "Geek"
String format pada perintah pertama menyertakan beberapa teksnya sendiri. Kami meneruskan string "Geek" sebagai argumen ke printf
. Ini dicocokkan dengan, dan dicetak oleh, penentu format “ %s
”. Perhatikan bahwa hanya ada spasi antara string format dan string argumen. Di C, Anda perlu koma untuk memisahkannya tetapi dengan printf
versi Bash menggunakan spasi sudah cukup.
String format kedua hanya berisi penentu format dan urutan escape baris baru. Tiga argumen string digunakan oleh masing-masing penentu format “ %s
” secara bergantian. Sekali lagi, di C, Anda perlu memberi koma di antara setiap argumen tetapi Bash printf
memungkinkan kita melupakannya.
Untuk mencetak berbagai jenis argumen, Anda cukup menggunakan penentu format yang sesuai. Inilah rutinitas konversi angka cepat yang dibuat menggunakan printf
. Kami akan mencetak nilai 15 dalam notasi desimal, oktal, dan heksadesimal.
printf "Des: %d\nOkt: %o\nHex: %x\n" 15 15 15
Mari kita rapikan kembali sedikit sehingga contohnya tidak terlalu berantakan.
printf "Hex: %x\n" 15
Sebagian besar dari kita terbiasa melihat nilai heksadesimal dalam huruf besar dan dengan nilai kurang dari 0x10 yang dicetak dengan nol di depan. Kita dapat mencapainya dengan menggunakan penentu format heksadesimal huruf besar " %X
" dan menempatkan penentu lebar antara tanda persen " %
" dan karakter " X
".
Ini memberitahu printf
lebar bidang tempat argumen harus dicetak. Bidang diisi dengan spasi. Dengan format ini, nilai dua digit akan dicetak tanpa bantalan apa pun.
printf "Hex: %2X\n" 15
Kami sekarang mendapatkan nilai huruf besar, dicetak dengan spasi terdepan. Kita dapat membuat printf
pad bidang dengan nol alih-alih spasi dengan meletakkan nol di depan keduanya:
printf "Hex: %02X\n" 15
Penentu presisi memungkinkan Anda untuk mengatur jumlah titik desimal untuk disertakan dalam output.
printf "Titik mengambang: %08.3f\n" 9.243546
Hal ini memudahkan untuk menghasilkan tabel hasil dengan output yang disejajarkan dengan rapi. Perintah berikut ini juga menunjukkan keanehan lain dari Bash printf
. Jika ada lebih banyak argumen daripada penentu format, argumen dimasukkan ke dalam string format dalam kumpulan hingga semua argumen habis digunakan. Ukuran batch yang diproses pada suatu waktu adalah jumlah penentu format dalam string format. Di C, argumen tambahan dalam panggilan fungsi printf
diabaikan.
printf "Mengambang: %8.3f\n" 9.243546 23.665 8.0021
Anda dapat menggunakan penentu lebar dan presisi dengan string juga. Perintah ini mencetak string dalam bidang lebar 10 karakter.
printf "%10s %d\n" "mantel" 7 "sepatu" 22 "Payung" 3
Secara default, nilai rata kanan di bidangnya. Untuk membenarkannya ke kiri, gunakan tanda minus “ -
” tepat di belakang tanda persen “ %
”.
printf "%-10s %d" "mantel" 7 "sepatu" 22 "Payung" 3
Penentu presisi dapat digunakan untuk mengatur jumlah maksimum karakter yang dicetak. Kami menggunakan karakter titik dua “ :
” untuk menunjukkan batas bidang lebar. Bukan bagaimana kata "Payung" dipotong.
printf ":%10.6s:\n" "mantel" "sepatu" "Payung"
printf ":%-10.6s:\n" "mantel" "sepatu" "Payung"
Penentu lebar bahkan dapat diteruskan sebagai argumen . Gunakan tanda bintang “ *
” alih-alih penentu numerik, dan berikan lebar sebagai argumen bilangan bulat.
printf "%*s\n" 20 "Paling Kanan" 12 "Tengah" 5 "paling kiri"
Trik dan Keunikan Lainnya
Penentu format di dalam string format akan bekerja dengan nilai dari tipe yang sesuai, baik yang diberikan pada baris perintah sebagai argumen biasa atau apakah dihasilkan sebagai output dari ekspresi .
Ini mencetak jumlah dua angka:
printf "23+32=%d\n" $((23+32))
Perintah ini mencetak jumlah direktori di direktori kerja saat ini:
printf "Ada %d direktori\n" $(ls -d */ | wc -l)
Perintah printf
ini mencetak string yang dikembalikan dari panggilan ke perintah lain.
printf "Pengguna saat ini: %s\n" $(whoami)
Jika penentu format string “ %s
” tidak disertakan dengan argumen printf
tidak mencetak apa pun.
printf "Satu: %s dua: %s\n" "Alfa"
Jika penentu format string “ %s
” diberikan dengan nilai numerik secara tidak sengaja, ia mencetaknya seolah-olah itu adalah string dan tidak mengeluh. Jangan coba ini dengan C printf
—hal-hal yang sangat buruk akan terjadi. Program Anda mungkin akan macet. Tetapi printf
Bash menanganinya tanpa mengeluh.
printf "Satu: %s dua: %s\n" "Alfa" 777
Jika penentu format integer “ %d
” tidak menerima argumen, itu akan mencetak nol.
printf "Bilangan bulat: %d\n"
Jika penentu format integer “ %d
” menerima argumen string secara tidak sengaja, Bash akan mencetak pesan kesalahan dan printf
akan mencetak nol.
printf "Bilangan bulat: %d\n" "Tujuh"
Simbol canggung dapat dibuat dengan menggunakan nomor Unicode atau "titik kode". Ini diloloskan menggunakan huruf "u" diikuti dengan nilai Unicode mereka.
printf "Simbol Euro: \u20AC\n"
Untuk menyertakan urutan escape dalam string argumen , Anda harus menggunakan penentu format “ %b
” dalam string format, bukan penentu format string “ %s
”.
printf "%s" "\u20AC\n"
printf "%b" "\u20AC\n"
Pernyataan printf
pertama tidak memproses nilai Unicode dan tidak mengenali urutan escape baris baru. Pernyataan printf
kedua menggunakan penentu format “ %b
”. Ini dengan benar menangani karakter Unicode dan baris baru dicetak.
TERKAIT: Apa Pengkodean Karakter Seperti ANSI dan Unicode, dan Bagaimana Perbedaannya?
Kuda untuk Kursus
Terkadang yang perlu Anda lakukan hanyalah echo
beberapa teks ke jendela terminal. Tetapi ketika Anda perlu menerapkan beberapa pemosisian dan pemformatan, printf
adalah alat yang tepat untuk pekerjaan itu.
printf "%b" "I-" "I-" "-" "Itu saja.\n"