Dalam kasus khusus printf
, Anda selalu dapat melakukan:
echo {1..8} | xargs printf 'the number %s comes before %s\n'
karena printf
memiliki xargs
kemampuan 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, xargs
perintah sederhana dapat menghasilkan xargs
menjalankan beberapa contoh printf
, beberapa di antaranya mungkin memiliki jumlah argumen ganjil. Anda dapat beralih -n 1000
ke xargs
untuk 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 printf
s.
Catatan yang xargs
akan 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 printf
sekali tanpa argumen. GNU xargs
dan yang kompatibel memiliki opsi -r
(atau --no-run-if-empty
) untuk menghindarinya.
Agar lebih jelas, jawaban sederhana ini khusus untuk printf
contoh 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"