Dalam kasus khusus printf, Anda selalu dapat melakukan:
echo {1..8} | xargs printf 'the number %s comes before %s\n'
karena printfmemiliki xargskemampuan seperti intrinsik untuk mengeksekusi beberapa kali jika diberikan lebih banyak argumen daripada yang dibutuhkan untuk doa tunggal. Meskipun itu memiliki sedikit kelebihan
printf 'the number %s comes before %s\n' {1..8}
Dan untuk daftar besar, xargsperintah sederhana dapat menghasilkan xargsmenjalankan beberapa contoh printf, beberapa di antaranya mungkin memiliki jumlah argumen ganjil. Anda dapat beralih -n 1000ke xargsuntuk menjaga itu, di mana 1000 adalah bilangan genap yang harus cukup kecil sehingga tidak mencapai batas daftar arg terlalu lama dan cukup besar untuk menghindari menjalankan begitu banyak printfs.
Catatan yang xargsakan memanggil, bukan builtin shell Anda printf, tetapi eksternal printf, dengan setiap doa dalam proses baru yang terpisah.
Perhatikan juga bahwa untuk input kosong, kecuali pada beberapa BSD, itu akan tetap berjalan printfsekali tanpa argumen. GNU xargsdan yang kompatibel memiliki opsi -r
(atau --no-run-if-empty) untuk menghindarinya.
Agar lebih jelas, jawaban sederhana ini khusus untuk printfcontoh Anda , dan tidak akan berfungsi dalam kasus umum di mana Anda harus melewatkan dua parameter sekaligus ke perintah Anda (seperti halnya untuk diff, misalnya). Untuk mengatasi masalah umum zsh, Anda dapat menggunakan:
for i j ({1..8}) echo "the number $i comes before $j"