如何将命令输出作为多个参数传递给另一个命令

时间:2014-11-04 18:41:37

标签: linux bash shell unix

我有一个产生如下输出的命令:

$ ./command1
word1 word2 word3 

我想将这三个单词作为参数传递给另一个命令:

$ command2 word1 word2 word3

如何将command1输出作为三个不同的参数$ 1 $ 2 $ 3传递给command2?

2 个答案:

答案 0 :(得分:1)

只需使用不带引号的命令替换:

$ ./command2 $(./command1)

但是,这也会使command1的输出受到路径名生成的影响,因此如果输出可能包含*.txt之类的内容,则可能会在传递给command2之前扩展为多个单词。 }。在这种情况下,您需要使用

$ read arg1 arg2 arg3 <<< "$(./command1)"
$ ./command2 "$arg1" "$arg2" "$arg3"

$ read -a args <<< "$(./command1)"
$ ./command2 "${args[@]}"

将输出拆分为3个单词而不使其生成路径名。


如果command1的输出看起来像

,那么这不会起作用
"word1a word1b" word2

并且您希望能够将word1a word1bword2两个参数传递给command2,但要正确这一点是非常棘手的,需要有关command1的详细信息可以输出以提供正确的解决方案。

答案 1 :(得分:0)

似乎是将输出与command1分开并将其发送到command2的最佳方法,因为三个不同的参数是使用带有-t选项的xargs,它将all作为参数传递,如下所示:

$ ./command1 | xargs -t command2

来源
https://serverfault.com/users/249134/chaosc