GNU/Linux >> Belajar Linux >  >> Linux

Perintah Bash printf

Biasanya, saat menulis skrip bash, kami menggunakan echo untuk mencetak ke output standar. echo adalah perintah sederhana tetapi kemampuannya terbatas.
Untuk memiliki kontrol lebih besar atas pemformatan output, gunakan printf perintah.

printf format perintah dan mencetak argumennya, mirip dengan C printf() fungsi.

printf Perintah #

printf adalah shell builtin di Bash dan shell populer lainnya seperti Zsh dan Ksh. Ada juga /usr/bin/printf yang berdiri sendiri biner, tetapi versi bawaan Shell diutamakan. Kami akan membahas versi bawaan Bash dari printf .

Sintaks untuk printf perintahnya adalah sebagai berikut:

printf [-v var] format [arguments]

-v opsi memberitahu printf bukan untuk mencetak output tetapi untuk menetapkannya ke variabel.

format adalah string yang mungkin berisi tiga jenis objek yang berbeda:

  • Karakter normal yang hanya dicetak ke output apa adanya.
  • Karakter yang lolos dari garis miring terbalik yang ditafsirkan dan kemudian dicetak.
  • Spesifikasi konversi yang menjelaskan format dan diganti dengan nilai argumen masing-masing yang mengikuti string format.

Perintah menerima sejumlah arguments . Jika lebih banyak arguments daripada penentu format yang disediakan, format string digunakan kembali untuk menggunakan semua argumen. Jika lebih sedikit arguments daripada penentu format yang disediakan, penentu format numerik tambahan disetel ke nilai nol sedangkan penentu format string disetel ke string nol.

Di bawah ini adalah beberapa poin yang perlu dipertimbangkan saat meneruskan argumen printf perintah:

  • Shell akan mengganti semua variabel, pencocokan wildcard, dan karakter khusus sebelum meneruskan argumen ke printf perintah.
  • Saat menggunakan tanda kutip tunggal '' nilai literal dari setiap karakter yang diapit dalam tanda kutip akan dipertahankan. Variabel dan perintah tidak akan diperluas.
printf "Open issues: %s\nClosed issues: %s\n" "34" "65"
Open issues: 34
Closed issues: 65

String Open issues: %s\nClosed issues: %s\n adalah format sementara "34" dan "65" adalah argumen. String format berisi dua karakter baris baru (\n ) dan dua penentu format (%s ) yang diganti dengan argumen.

printf perintah tidak menambahkan karakter baris baru (\n ) di akhir baris.

Karakter yang lolos dari garis miring terbalik #

Karakter yang lolos dari garis miring terbalik diinterpretasikan saat digunakan dalam format string atau dalam argumen yang sesuai dengan %b penentu konversi. Berikut adalah daftar karakter pelarian yang paling umum:

  • \\ - Menampilkan karakter garis miring terbalik.
  • \b - Menampilkan karakter spasi mundur.
  • \n - Menampilkan baris baru.
  • \r - Menampilkan carriage return.
  • \t - Menampilkan tab horizontal.
  • \v - Menampilkan tab vertikal.

Spesifikasi konversi #

Spesifikasi konversi berbentuk sebagai berikut:

%[flags][width][.precision]specifier

Setiap spesifikasi konversi dibintangi dengan tanda persen (% ), menyertakan pengubah opsional dan diakhiri dengan salah satu huruf berikut yang mewakili tipe data (specifier ) dari argumen yang sesuai:aAbcdeEfgGioqsuxX .

Jenis penentu konversi #

Konversi jenis specifier adalah karakter yang menentukan bagaimana menafsirkan argumen yang sesuai. Karakter ini wajib diisi, dan ditempatkan setelah kolom opsional.

Di bawah ini adalah daftar yang menunjukkan semua jenis konversi dan apa yang mereka lakukan:

  • %b - Cetak argumen sambil memperluas urutan garis miring terbalik.
  • %q - Cetak argumen yang dikutip shell, dapat digunakan kembali sebagai input.
  • %d , %i - Cetak argumen sebagai bilangan bulat desimal bertanda.
  • %u - Cetak argumen sebagai bilangan bulat desimal yang tidak ditandatangani.
  • %o - Cetak argumen sebagai bilangan bulat oktal yang tidak ditandatangani.
  • %x , %X - Cetak argumen sebagai bilangan bulat heksadesimal yang tidak ditandatangani. %x mencetak huruf kecil dan %X mencetak huruf besar.
  • %e , %E - Cetak argumen sebagai bilangan floating-point dalam notasi eksponensial. %e mencetak huruf kecil dan %E mencetak huruf besar.
  • %a , %A - Cetak argumen sebagai bilangan floating-point dalam notasi pecahan heksadesimal. %a mencetak huruf kecil dan %A mencetak huruf besar.
  • %g , %G - Cetak argumen sebagai bilangan floating-point dalam notasi normal atau eksponensial, mana yang lebih sesuai untuk nilai dan presisi yang diberikan. %g mencetak huruf kecil dan %G mencetak huruf besar.
  • %c - Cetak argumen sebagai satu karakter.
  • %f - Cetak argumen sebagai angka floating-point.
  • %s - Cetak argumen sebagai string.
  • %% - Cetak literal % simbol.

Angka yang tidak bertanda mewakili angka nol dan positif, sedangkan angka bertanda mewakili angka negatif, nol, dan positif.

Perintah berikut mencetak angka 100 dalam tiga sistem angka yang berbeda:

printf "Decimal: %d\nHex: %x\nOctal: %o\n" 100 100 100
Decimal: 100
Hex: 64
Octal: 144

Menandai direktif #

Bendera adalah pengubah opsional pertama dan digunakan untuk mengatur justifikasi, awalan nol, awalan, dll.

Berikut adalah yang paling umum:

  • - - Rata kiri teks yang dicetak di dalam bidang. Secara default, teks rata kanan.
  • + - Awalan angka dengan + atau - tanda-tanda. Secara default, hanya angka negatif yang diawali dengan tanda negatif.
  • 0 - Menempatkan angka dengan nol di depan, bukan spasi.
  • kosong - Awalan angka positif dengan spasi kosong dan angka negatif dengan tanda minus (- ).
  • # - Format alternatif untuk angka.

Petunjuk lebar #

width direktif yang diajukan ditempatkan setelah karakter bendera apa pun dan menentukan jumlah minimum karakter yang harus dihasilkan konversi.

Jika lebar teks yang dihasilkan kurang dari lebar yang ditentukan, itu diisi dengan spasi. Lebar dapat ditentukan sebagai bilangan bulat desimal non-negatif atau tanda bintang (* ).

Ini contohnya:

printf "%20s %d\n" Mark 305

%20s berarti mengatur bidang setidaknya 20 karakter. Kosong ditambahkan sebelum teks karena, secara default, output benar-benar. Untuk meratakan teks ke kiri, gunakan - bendera (%-20s ).

      Mark 305

Saat tanda bintang (* ) digunakan sebagai width direktif, maka lebar bidang konversi ditetapkan oleh argumen lebar yang mendahului argumen yang sedang diformat.

Pada contoh di bawah ini kami menyetel lebar ke 10:

printf "%0*d" 10 5

0 adalah bendera yang mengisi angka dengan nol di depan, bukan kosong. Teks keluaran akan memiliki setidaknya 10 karakter:

0000000005

Petunjuk presisi #

.precision pengubah terdiri dari titik (. ) diikuti dengan bilangan bulat positif atau asterisk (* ) yang bergantung pada jenis penentu, menetapkan jumlah karakter string atau digit atau jumlah tempat desimal yang akan dicetak.

Presisi memiliki efek sebagai berikut:

  • Jika jenis konversi adalah bilangan bulat, presisi menentukan jumlah digit minimum yang akan dicetak. Jika jumlah digit dalam argumen kurang dari presisi, angka nol di depan akan dicetak.
  • Jika jenis konversi adalah titik-mengambang, presisi menentukan jumlah digit yang mengikuti karakter titik desimal. Presisi default adalah 6.
  • Jika tipe konversi adalah string, presisi menentukan jumlah karakter maksimum yang akan dicetak. Jika jumlah karakter dalam argumen lebih besar dari presisi, kelebihan karakter akan dipotong.

Berikut adalah contoh yang menunjukkan cara membulatkan angka floating-point menjadi 3 desimal:

printf "%.3f" 1.61803398
1.618

Saat presisi disetel ke tanda bintang (* ), nilainya ditetapkan oleh argumen presisi yang mendahului argumen yang sedang diformat.

printf "%.*f" 3 1.61803398
1.618

Kesimpulan #

printf perintah mengambil format dan argumen dan mencetak teks yang diformat.

Jika Anda memiliki pertanyaan atau masukan, jangan ragu untuk memberikan komentar.


Linux
  1. Perintah "eval" Di Bash?

  2. printf:perintah tidak ditemukan

  3. printf Contoh Perintah di Linux

  1. perintah ekspor bash

  2. bash sh - perintah tidak ditemukan

  3. Bash - Perintah tanggal dan spasi

  1. Perintah Bash trap Dijelaskan

  2. Dasar-dasar perintah Linux:printf

  3. memulai apachectl dari bash