Jawaban:
Tulis saja {}
dua kali dalam perintah Anda. Berikut ini akan berfungsi:
$ echo test | xargs -I {} echo {} {}
test test
Masalah Anda adalah bagaimana perintah bersarang . Mari kita lihat ini:
echo test | xargs -I {} echo {} && echo {}
bash akan mengeksekusi echo test | xargs -I {} echo {}
. Jika berhasil dijalankan, echo {}
dieksekusi. Untuk mengubah sarang, Anda dapat melakukan sesuatu seperti ini:
echo test | xargs -I {} sh -c "echo {} && echo {}"
Namun, Anda bisa mendapatkan masalah karena pendekatannya mungkin rentan terhadap injeksi kode. Ketika "test" diganti dengan kode shell, itu dijalankan. Oleh karena itu, Anda mungkin harus meneruskan input ke shell bersarang dengan argumen.
echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
$(rm -f *)
,. Lebih baik melakukannyaxargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
Pilihan lain adalah menggunakan -i
flag, yang sama dengan -I{}
(ini menyiratkan bahwa penggantian diberikan bersama {}
):
$ echo test | xargs -i echo {} {}
This option is deprecated; use -I instead.
telah ditambahkan ke manual man xargs
.
Bagi saya hanya huruf kecil yang berfungsi. Saya memiliki ratusan gambar dalam direktori dan ingin memasukkannya ke dalam daftar. -I
Pilihan huruf besar saya tidak bekerja untuk saya. Hanya huruf kecil. Mungkin karena perbedaan versi. Semua gambar ini memiliki nama seperti Daniel_(somenumber).jpg
.
Sintaks ini berhasil:
ls -l | tr -s ' ' ':'| cut -d: -f9 | xargs -i echo "img src='"{}"'alt='{}'"
Pengembalian:
src='Daniel_248.jpg' alt='Daniel_248.jpg'
...
Linux ver 4.14.96-hw + # 80 SMP x86_64 GNU / Linux
var=test & echo $var ...