Singkatnya, printf %100s
akan mencetak 100 spasi, dan tr " " "="
akan mengkonversi ruang-ruang itu menjadi tanda sama dengan, secara efektif mencetak 100 tanda sama.
Hancurkan:
printf
adalah shell built-in. Biasanya diperlukan dua argumen atau lebih, yang pertama adalah "format string" dan sisanya akan digunakan untuk mengisi placeholder dalam string format itu. Setelah template itu terisi penuh, itu akan mencetak hasilnya. Jika ada lebih banyak argumen yang tersisa, itu akan memulai kembali, mengisi lebih banyak argumen dan mencetak string yang dihasilkan.
String format yang digunakan untuk printf
mengambil spesifikasi format, yang dimulai dengan %
dan diakhiri dengan satu huruf, jadi %d
berarti integer (menggunakan basis desimal, oleh karena itu "d"), %f
berarti angka titik-mengambang dan %s
berarti serangkaian karakter. Karakter selain huruf setelah %
pengubah untuk spesifikasi format dan, khususnya, angka digunakan untuk menentukan panjang bidang yang diminta pada output. Jadi %100s
akan memformat string untuk memiliki setidaknya 100 karakter, itu akan pad dengan spasi dan itu akan tetap selaras (dengan kata lain, tambahkan spasi di awal string.)
Jika melewati argumen tambahan, itu akan menggunakannya untuk %s
bidang itu, jadi misalnya printf %100s abc
akan mencetak 97 spasi (untuk mendapatkan total 100, mengingat 3 pada "abc") diikuti oleh string "abc" yang sebenarnya. Tetapi jika tidak ada argumen yang diberikan, maka spesifikasi format diisi dengan argumen kosong atau nol (yang merupakan string kosong untuk %s
, itu akan menjadi 0 untuk %d
, dll.) Jadi itu sama seperti jika string kosong dilewatkan, seperti printf %100s ''
. Hasil akhirnya adalah hanya lapisan 100 karakter yang dicetak.
Jadi, menyatukan semuanya, printf %100s
menghasilkan 100 ruang yang dicetak.
Sekarang tr
adalah alat untuk menerjemahkan karakter dari input ke output. Dibutuhkan dua argumen, SET1 dan SET2, masing-masing satu set karakter, dan kemudian menerjemahkan karakter pertama SET1 menjadi yang pertama dari SET2, karakter kedua SET1 ke dalam kedua SET2 dan seterusnya. tr
membaca inputnya dari stdin dan menulisnya kembali ke stdout (jadi itu sangat berguna dalam pipa seperti yang di atas.) tr
akan selalu menerjemahkan semua kemunculan karakter itu dalam string yang diberikan.
Misalnya, tr aeiou 12345
akan menerjemahkan huruf kecil ke angka 1 hingga 5 dalam urutan itu, jadi itu akan menerjemahkan "antrian" menjadi "q52523ng" misalnya. Anda juga dapat meneruskannya rentang karakter, seperti tr a-z A-Z
mengubah huruf kecil apa pun menjadi huruf besar yang sesuai.
Jadi tr " " "="
hanya menerjemahkan spasi menjadi tanda yang sama di seluruh string. Ruang pertama harus dikutip agar diakui sebagai argumen. The =
tidak benar-benar perlu untuk dikutip, tetapi melakukan hal itu tidak sakit. tr " " =
akan bekerja sama.
Menyatukan semuanya, cetak 100 spasi, lalu terjemahkan masing-masing ke dalam tanda yang sama.
Semoga ini menjelaskan dengan cukup detail, tetapi jika masih ada sesuatu yang Anda tidak mengerti, silakan tinggalkan komentar dan saya akan mencoba mengatasinya.
printf '%100s' ' ' | tr " " "="
printf '%100s' ''
, dengan string kosong ... Saya memperbarui jawaban untuk memasukkan itu. Dalam kasus khusus ini, string kosong atau spasi tunggal tidak akan membuat perbedaan, tetapi Anda dapat melihat perbedaannyaprintf '%sx\n'
, yang samaprintf '%sx\n' ''
tetapi berbeda dariprintf '%sx\n' ' '
. Saya harap itu membantu!tr
beroperasi pada set karakter. Ini sering ditinggalkan.The
printf
perintah menggunakan argumen pertama sebagai format untuk mencetak argumen selanjutnya.printf %100s
mencetak argumennya dengan lebar 100 karakter, menggunakan spasi (di sebelah kiri). Tidak ada argumen yang diberikan untuk memformat, sehingga memformat string kosong satu kali, dan menghasilkan 100 spasi. Anda dapat melihat bahwa:(20 adalah hex untuk spasi;
*
berarti baris sebelumnya diulang)String format menggunakan kira-kira
Xprintf
specifier C%
:, lebar opsional agar sesuai dengan nilai yang diformat, dan tipe format yang digunakan.s
adalah pemformatan string, dan string diisi dengan spasi di sebelah kiri secara default. Mungkin ada beberapa format, atau bagian literal lainnya:printf "a%10sb\n" hello
cetaktr
mengganti karakter yang dipilih dalam input standar dengan penggantian yang dipilih , dan mencetak hasilnya ke output standarnya.tr " " "="
memiliki karakter tunggal untuk diganti - spasi - dan karakter tunggal untuk menggantinya dengan - tanda sama dengan. Dengan demikian mengubah setiap ruang di input menjadi=
, dan meninggalkan sisanya tidak berubah. Anda dapat mencobanya juga:(Saya mengetik "hello world")
Anda bisa memiliki beberapa penggantian:
tr abc def
mengubah a menjadi d, b menjadi e, c menjadi f, dan membiarkan sisanya tidak berubah. Ini hanya satu karakter, karena itulah yangprintf
bisa murah.Pipa
|
menyebabkan output dari perintah di sebelah kiriprintf %100s
,, untuk digunakan sebagai input ke perintah di sebelah kanantr " " "="
,. Yaitu, seratus ruang berturut-turut diberikantr
, dan masing-masing diganti dengan=
, dengan string baru dicetak.sumber
printf '%100s' ' ' | tr " " "="