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 " " "="