Singkatnya, printf %100sakan mencetak 100 spasi, dan tr " " "="akan mengkonversi ruang-ruang itu menjadi tanda sama dengan, secara efektif mencetak 100 tanda sama.
Hancurkan:
printfadalah 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 printfmengambil spesifikasi format, yang dimulai dengan %dan diakhiri dengan satu huruf, jadi %dberarti integer (menggunakan basis desimal, oleh karena itu "d"), %fberarti angka titik-mengambang dan %sberarti serangkaian karakter. Karakter selain huruf setelah %pengubah untuk spesifikasi format dan, khususnya, angka digunakan untuk menentukan panjang bidang yang diminta pada output. Jadi %100sakan 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 %sbidang itu, jadi misalnya printf %100s abcakan 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 %100smenghasilkan 100 ruang yang dicetak.
Sekarang tradalah 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. trmembaca inputnya dari stdin dan menulisnya kembali ke stdout (jadi itu sangat berguna dalam pipa seperti yang di atas.) trakan selalu menerjemahkan semua kemunculan karakter itu dalam string yang diberikan.
Misalnya, tr aeiou 12345akan 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-Zmengubah 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 " " "="