Respuestas:
Solo escribe {}dos veces en tu comando. Lo siguiente funcionaría:
$ echo test | xargs -I {} echo {} {}
test test
Su problema es cómo se anidan los comandos . Veamos esto:
echo test | xargs -I {} echo {} && echo {}
bash se ejecutará echo test | xargs -I {} echo {}. Si se ejecuta con éxito, echo {}se ejecuta. Para cambiar la anidación, puede hacer algo como esto:
echo test | xargs -I {} sh -c "echo {} && echo {}"
Sin embargo, podría tener problemas porque el enfoque podría ser propenso a la inyección de código. Cuando "prueba" se sustituye con código de shell, se ejecuta. Por lo tanto, probablemente debería pasar la entrada al shell anidado con argumentos.
echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
$(rm -f *). Es mejor hacerloxargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
Otra opción es usar -iflag, que es lo mismo que -I{}(implica que el reemplazo se da con {}):
$ echo test | xargs -i echo {} {}
This option is deprecated; use -I instead.se ha agregado al manual man xargs.
Para mí solo funciona la minúscula. Tenía cientos de imágenes en un directorio y quería incluirlas en una lista. La -Iopción mayúscula i no funcionó para mí. Solo las minúsculas. Probablemente debido a diferencias de versión. Todas estas imágenes tenían nombres similares Daniel_(somenumber).jpg.
Esta sintaxis ha funcionado:
ls -l | tr -s ' ' ':'| cut -d: -f9 | xargs -i echo "img src='"{}"'alt='{}'"
Devoluciones:
src='Daniel_248.jpg' alt='Daniel_248.jpg'
...
Linux ver 4.14.96-hw + # 80 SMP x86_64 GNU / Linux
var=test & echo $var ...