Answers:
只需{}
在命令中编写两次即可。以下将起作用:
$ echo test | xargs -I {} echo {} {}
test test
您的问题是命令如何嵌套。让我们看一下:
echo test | xargs -I {} echo {} && echo {}
bash将执行echo test | xargs -I {} echo {}
。如果运行成功,echo {}
则执行。要更改嵌套,您可以执行以下操作:
echo test | xargs -I {} sh -c "echo {} && echo {}"
但是,您可能会遇到麻烦,因为该方法可能易于代码注入。当用外壳程序代码替换“ test”时,将执行它。因此,您可能应该将输入与参数一起传递给嵌套外壳。
echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
$(rm -f *)
。最好这么做xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
另一种选择是使用-i
标志,它与-I{}
(意味着用进行替换{}
)相同:
$ echo test | xargs -i echo {} {}
This option is deprecated; use -I instead.
已添加到手册中man xargs
。
对我来说,只有小写字母有效。我在目录中有数百张图片,并希望将它们的来源放入列表中。大写的我-I
选项对我不起作用。仅小写。可能是由于版本差异所致。这些图像的名称都像Daniel_(somenumber).jpg
。
此语法有效:
ls -l | tr -s ' ' ':'| cut -d: -f9 | xargs -i echo "img src='"{}"'alt='{}'"
返回值:
src='Daniel_248.jpg' alt='Daniel_248.jpg'
...
Linux版本4.14.96-hw +#80 SMP x86_64 GNU / Linux
var=test & echo $var ...