Dalam artikel ini, saya akan menjelaskan penggunaan dasar Bash printf perintah dengan contoh di Linux. Pada akhir artikel ini, Anda akan nyaman menggunakan perintah printf dalam skrip shell Bash.
Perintah printf bash
Peluk menawarkan dua jenis perintah yang dapat digunakan untuk mencetak output Anda ke terminal. Salah satunya adalah gema perintah yang banyak digunakan untuk tujuan ini. Yang kedua adalah printf perintah.
Printf
mirip dengan fungsi printf di C bahasa tetapi dengan serangkaian fiturnya sendiri. Perbedaan utama antara echo
dan printf
perintahnya adalah printf
menawarkan pemformatan dan fungsionalitas tambahan dibandingkan dengan echo
memerintah.
Jika Anda belum menggunakan echo
perintah sebelumnya, kami memiliki artikel terperinci tentangnya yang harus Anda lihat.
- Perintah Bash Echo Dijelaskan Dengan Contoh Di Linux
Printf
adalah shell built-in, tetapi Anda juga dapat menemukan perintah eksternal untuk printf
. Builtin lebih diutamakan daripada perintah eksternal. Anda bisa mendapatkan informasi ini dengan menjalankan type
perintah seperti yang ditunjukkan di bawah ini.
$ type -a printf printf is a shell builtin printf is /usr/bin/printf printf is /bin/printf
Untuk lebih jelasnya tentang type
perintah, lihat panduan berikut:
- Tutorial Perintah Mengetik Dengan Contoh Untuk Pemula
Jika Anda ingin menjalankan versi eksternal printf
, Anda harus menunjuk ke jalur direktori lengkap tempat biner berada.
$ printf "Hello World\n" # SHELL BUILTIN
$ /usr/bin/printf "Hello World\n" # EXTERNAL VERSION OF PRINTF
Menampilkan bantuan cetak Bash
Seperti yang saya sebutkan di bagian sebelumnya, printf
adalah bash bawaan. Anda harus membuka bash
halaman manual dan navigasikan ke printf
bagian.
$ man bash
/printf → presss
Anda juga dapat menjalankan perintah berikut yang akan menampilkan bagian bantuan printf
dari bash
halaman manual.
$ man bash | less --pattern='^ *printf +['
Bentuk dasar perintah printf
Sepanjang contoh, saya akan membandingkan printf
dengan echo
perintah untuk memahami kesamaan.
Di bawah ini adalah format untuk printf
perintah:
printf [-v var] format [arguments]
Argumen harus diteruskan ke printf
jika tidak maka akan gagal seperti yang ditunjukkan pada gambar di bawah ini.
$ printf
$ echo $?
Berikan argumen dan jalankan printf
perintah lagi. Dari contoh di bawah ini Anda dapat melihat saya telah menambahkan \n yang merupakan karakter baris baru. Secara default, printf
tidak akan menambahkan baris baru seperti echo
perintah, jadi Anda harus menambahkan \n
.
$ printf "Linux is fun to work with" # WITHOUT NEW LINE
$ printf "Linux is fun to work with\n" # WITH NEW LINE
Variabel dan interpretasi perintah
Anda dapat menyertakan variabel apa pun atau menjalankan perintah di dalam printf
penyataan. Perilaku ini mirip dengan echo
perintah.
$ VAR1="Linux"
$ printf "$VAR1 is fun to work with\n"
Bacaan yang disarankan:
- Bash Scripting – Variabel Dijelaskan Dengan Contoh
Perilaku tanda kutip tunggal vs ganda
Saat Anda menyertakan argumen Anda dengan tanda kutip tunggal, variabel dan perintah akan diperlakukan sebagai teks biasa. Ini adalah perilaku yang sama di echo
perintah juga. Anda harus menyertakan argumen dengan tanda kutip ganda jika Anda ingin variabel dan perintah diperluas.
$ printf '$VAR1 is fun to work with\n'
$ printf 'Today date = $(date)\n'
Saat Anda memberikan argumen tanpa tanda kutip, printf
hanya akan mempertimbangkan kata pertama sebagai argumen dan mencetaknya. Jadi gunakan tanda kutip di sekitar printf
diperlukan.
$ printf Today date = $(date)\n
Mengarahkan dan menyalurkan output
Secara default, printf
akan mengirimkan output ke stdout (terminal). Anda dapat mengarahkan output ke file menggunakan operator pengalihan atau gabungkan dengan operator pipa untuk diproses lebih lanjut.
# PRINT TO STDOUT $ printf "Today date = $(date)\n"
# REDIRECT TO A FILE $ printf "Today date = $(date)\n" > /tmp/tdy.txt $ cat /tmp/tdy.txt
# PIPE $ printf "Today date = $(date)\n" | grep -i -o IST
Bacaan terkait:
- Pengalihan Bash Dijelaskan Dengan Contoh
Menetapkan output ke variabel
Terkadang Anda mungkin ingin menyimpan printf
output ke variabel dan menggunakannya nanti untuk beberapa pemrosesan. Biasanya Anda akan menjalankan printf
diapit dengan tanda kurung yang akan menjalankan perintah dan menetapkan output ke variabel.
$ ZONE=$(printf "Today date = $(date)\n" | grep -i -o IST)
$ printf $ZONE
Atau, Anda dapat menggunakan -v
tandai bersama dengan printf
untuk menyimpan output ke variabel. Anda harus memberikan nama variabel setelah -v
bendera.
$ printf -v TIME "Today date = $(date)\n" $ echo $TIME
Pernyataan printf MultiLine
Bila Anda memiliki lebih dari satu baris untuk dicetak, maka Anda dapat menyertakan teks dalam tanda kutip ganda. Demikian pula, jika Anda memiliki garis besar untuk dicetak sebagai satu baris dan ingin menulis baris dalam multi-baris untuk keterbacaan kode yang lebih baik, Anda dapat menggunakan garis miring terbalik di akhir setiap baris di mana baris berikutnya akan dianggap sebagai lanjutan ke baris sebelumnya.
$ printf "\n I am running PoP_OS
It is a great OS
With Great features\n"
$ printf "I am running pop_os \
It is a great OS \
With Great features\n"
Karakter yang lolos dari garis miring terbalik
Anda dapat menggunakan karakter garis miring terbalik berikut di printf
.
- Karakter baris baru (\n)
- Tab Horizontal (\t) dan Tab Vertikal (\v)
- Karakter spasi mundur (\b)
- Kereta pulang (\r)
Mari kita bahas satu per satu dengan contoh.
Karakter baris baru (\n)
Kita telah melihat tentang karakter baris baru (\n
) di semua bagian sebelumnya. Karakter baris baru (\n
) akan menambahkan baris baru.
$ printf "Today date = $(date)\n"
Tab horizontal (\t) dan tab vertikal(\v)
Karakter tab horizontal dan vertikal digunakan untuk menambahkan spasi tab ke printf
argumen.
$ printf "Today date \t $(date)\n" # HORIZONTAL TAB
$ printf "Today date \v $(date)\n" # VERTICAL TAB
Karakter spasi mundur (\b)
Karakter spasi mundur (\b
) akan menghapus satu huruf. Ini seperti menekan tombol Backspace dari keyboard kita.
$ printf "It's a rain\by day..\n"
Carriage return (\r)
Kursor diatur kembali ke posisi pertama saat carriage kembali (\r
) digunakan. Apa pun yang muncul setelah \r
akan menggantikan karakter dari posisi pertama.
$ printf "It's a rain\by\r day..\n"
Escape karakter backslash (\)
Jika Anda ingin keluar dari karakter khusus (\n
, \t
, \v
, \b
, \r
) dan perlakukan seperti string lalu awali dengan garis miring terbalik ganda (\\
).
$ printf "It's a rain\\by\\r day..\n"
Apa pun yang Anda lihat sampai sekarang, Anda dapat menemukan rangkaian operasi yang sama di echo
perintah juga. Jika Anda sudah mengetahui echo
perintah, saat ini Anda akan merasa sangat nyaman dengan printf
perintah juga.
Penentu format printf
Penentu format adalah cara untuk mengganti nilai dalam printf
alih-alih mengkodekan nilai dalam printf
. Ada banyak huruf yang digunakan untuk substitusi dan setiap huruf mewakili tipe data tertentu. Saat menggunakan penentu, Anda harus mengawalinya dengan %
simbol. Mari kita lihat beberapa penentu format yang umum digunakan.
Penentu string (%s)
Jika Anda ingin menempatkan string apa pun di dalam printf
, Anda harus menggunakan %s
. Lihatlah contoh di bawah ini. Saya memiliki printf
pernyataan dan saya ingin mengganti nilai "Bersatu" di dalam printf
. Jadi %s
digunakan yang merupakan penentu string dan ketika Anda menjalankan perintah nilainya "bersatu" akan diganti dengan %s
.
$ printf "++ Manchester %s has a strong lineup this season" "United"
Anda dapat memberikan argumen substitusi sebanyak yang Anda inginkan dan Anda harus menggunakan jumlah penentu yang sama di dalam argumen.
$ printf "++ %s %s has a strong lineup this %s" "Manchester" "United" "season"
Bagaimana jika lebih sedikit penentu dan lebih banyak argumen yang digunakan?
Lihatlah contoh di bawah ini. Saya hanya menggunakan satu penentu di awal dan telah melewati tiga argumen (string) untuk diganti. Cara printf
memperlakukan ini, ia akan mulai mengganti argumen pertama di penentu pertama dan argumen berikutnya akan diteruskan lagi ke penentu pertama karena tidak ada penentu lain. Dengan cara ini akan terjadi tiga kali pergantian pemain yang sebenarnya tidak tepat dan hasil yang kita inginkan.
$ printf "++ %s United has a strong lineup this Season\n" "Manchester" "United" "season"
Ada beberapa kasus penggunaan di mana perilaku ini masuk akal. Lihatlah contoh di bawah ini. Saya ingin mencetak pesan selamat datang untuk beberapa pemain dan memberikan nama mereka sebagai argumen. Biasanya Anda dapat menyimpan daftar nama dalam array dan mengulang melalui array dan mencetak pesan. Tapi ini adalah cara yang efektif untuk mencapai hasil dengan menghindari penggunaan loop.
$ printf "++ Welcome %s to manchester united\n" "Ronaldo" "Varane" "Jadon Sancho\n" ++ Welcome Ronaldo to manchester united ++ Welcome Varane to manchester united ++ Welcome Jadon Sancho to manchester united
Integer desimal bertanda (%d) dan integer desimal tidak bertanda (%u)
Untuk mengganti bilangan bulat yang hilang, gunakan %d
.
$ printf ">> Welcome %s to manchester united - You get shirt number - %d\n" "Ronaldo" 7 "Varane" 19 "Jadon Sancho" 25
Untuk mengganti bilangan bulat tak bertanda, gunakan %u
.
$ printf "UNSIGNED INTEGER = %u\n" 10
Jika Anda mencoba mengganti tipe data apa pun selain integer, Anda akan mendapatkan kesalahan.
$ printf ">> Ronaldo gets no %d\n" seven
Angka titik mengambang (%f)
Untuk mengganti angka floating point, gunakan %f
.
$ printf "Integer 100 to floating-point %f\n" 100
Menafsirkan urutan escape backslash
Anda dapat meneruskan urutan escape backslash sebagai argumen dan menggunakan %b
yang akan menginterpretasikan dan memperluas urutan escape backslash.
$ printf "Welcome to %b Manchester united %b" "\v" "\n"
Petunjuk konversi printf
Ada pengubah konversi opsional yang dapat digunakan untuk memformat printf
keluaran.
%[flags][width][.precision]specifier
Pengubah lebar
Pengubah lebar memutuskan jumlah minimum karakter dalam konversi. Jika jumlah karakter lebih sedikit, maka akan diberi awalan spasi seperti gambar di bawah ini.
$ printf "%10s\n" "Ronaldo"
Jika Anda perhatikan gambar di atas, specifier (Ronaldo) adalah 7 karakter dan saya telah menentukan lebarnya menjadi 10 . Dalam hal ini, itu akan menambahkan spasi untuk membenarkan lebar 10 .
Anda juga dapat menggunakan pengubah bendera untuk membenarkan perataan atau menambahkan nol alih-alih spasi. Misalnya, jika output harus rata kiri, Anda dapat menambahkan tanda hubung (-
) pengubah bendera.
$ printf "%-10s\n" "Ronaldo"
Dalam hal nilai integer dan floating-point, Anda dapat mengganti spasi dengan nol dengan menambahkan pengubah bendera nol (0).
$ printf "%010d \n" 7
Pengubah presisi
Ini adalah parameter opsional yang dapat digunakan untuk menentukan jumlah string, integer, dan posisi floating-point yang akan dicetak. Anda harus menggunakan dot(.) diikuti oleh bilangan bulat untuk menentukan jumlah posisi yang akan dicetak.
Lihatlah contoh di bawah ini. Saya menggunakan penentu string dan menyetel pengubah presisi ke empat.
$ printf "%.7s\n" "Ronaldo has joined Manu"
Tanda bintang (*
) dapat diteruskan sebagai ganti nilai bilangan bulat presisi. Tanda bintang akan menerima argumen untuk presisi, bukan hard-coding nilai presisi.
$ printf "%.*s\n" 7 "Ronaldo has joined Manu"
Kesimpulan
Kami telah membahas sedikit informasi tentang perintah Bash printf dalam artikel ini. Untuk menggunakan printf
dengan nyaman, praktikkan saja semua contoh yang diberikan dalam artikel. Printf jauh lebih kuat dalam memformat daripada contoh yang saya tunjukkan di artikel ini. Jika Anda merasa nyaman dengan dasar-dasarnya, tergantung pada kasus penggunaan, Anda dapat menggunakan printf
efisien.
Bacaan terkait:
- Bash Scripting – Array Terindeks Dijelaskan Dengan Contoh
- Bash Scripting – Array Asosiatif Dijelaskan Dengan Contoh
- Bash Scripting – Sementara Dan Sampai Perulangan Dijelaskan Dengan Contoh
- Skrip Bash – Untuk Pengulangan Dijelaskan Dengan Contoh
- Bash Scripting – Fungsi Dijelaskan Dengan Contoh
- Tutorial Bash Heredoc Untuk Pemula