如何在 xargs 中重复变量两次

如何在 xargs 中重复变量两次

在这个例子中,我怎样才能进行第二个回显来回显测试:

 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

另一种选择是使用-iflag,它与以下相同-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

相关内容