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 -i
flag, 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 -I
opció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 ...