![如何在 xargs 中重复变量两次](https://linux22.com/image/84720/%E5%A6%82%E4%BD%95%E5%9C%A8%20xargs%20%E4%B8%AD%E9%87%8D%E5%A4%8D%E5%8F%98%E9%87%8F%E4%B8%A4%E6%AC%A1.png)
在这个例子中,我怎样才能进行第二个回显来回显测试:
echo test | xargs -I {} echo {} && echo {}
答案1
{}
只需在命令中写两次即可。以下内容将起作用:
$ echo test | xargs -I {} echo {} {}
test test
你的问题是命令的方式嵌套的。让我们看看这个:
echo test | xargs -I {} echo {} && echo {}
巴什将执行echo test | xargs -I {} echo {}
.如果运行成功,echo {}
则执行。要更改嵌套,您可以执行以下操作:
echo test | xargs -I {} sh -c "echo {} && echo {}"
但是,您可能会遇到麻烦,因为该方法可能容易发生代码注入。当“test”被 shell 代码替换时,它就会被执行。因此,您可能应该使用参数将输入传递给嵌套 shell。
echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
答案2
另一种选择是使用-i
flag,它与以下相同-I{}
(这意味着替换是用 给出的{}
):
$ echo test | xargs -i echo {} {}
答案3
对我来说只有小写有效。我的目录中有数百张图像,并且希望将它们的源放入列表中。大写的 i-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