如何在xargs中重复变量两次

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)

  • 请注意,如果您有一个文件 callod,字面意思是`$(rm -f *)`,那么您将在最后的代码中得到意想不到的结果。最好做`xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}` (3认同)

Ome*_*gan 7

另一种选择是使用-i标志,它与-I{}(这意味着替换是用 给出的{})相同:

$ echo test | xargs -i echo {} {}
Run Code Online (Sandbox Code Playgroud)

  • 同时:`此选项已弃用;改用 -I。` 已添加到手册 `man xargs` 中。 (3认同)