35 xargs
在这个例子中,我怎样才能让第二个回声来回显测试:
echo test | xargs -I {} echo {} && echo {}
Run Code Online (Sandbox Code Playgroud)
Joj*_*GME 43
只需{}
在您的命令中写两次。以下将起作用:
$ echo test | xargs -I {} echo {} {}
test test
Run Code Online (Sandbox Code Playgroud)
您的问题是命令是如何嵌套的。让我们看看这个:
echo test | xargs -I {} echo {} && echo {}
Run Code Online (Sandbox Code Playgroud)
bash将执行echo test | xargs -I {} echo {}
. 如果运行成功,echo {}
则执行。要更改嵌套,您可以执行以下操作:
echo test | xargs -I {} sh -c "echo {} && echo {}"
Run Code Online (Sandbox Code Playgroud)
但是,您可能会遇到麻烦,因为该方法可能容易发生代码注入。当“test”被shell代码替换时,它被执行。因此,您可能应该将输入传递给带有参数的嵌套 shell。
echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用-i
标志,它与-I{}
(这意味着替换是用 给出的{}
)相同:
$ echo test | xargs -i echo {} {}
Run Code Online (Sandbox Code Playgroud)