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

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

所以我有一个脚本,当我给它两个地址时,它将搜索两个 HTML 链接:

echo "http://maps.google.be/maps?saddr\=$1\&daddr\=$2" | sed 's/ /%/g'

我想将其发送到wget,然后将输出保存在名为temp.html.我尝试过这个,但它不起作用。有人可以解释原因和/或给我一个解决方案吗?

#!/bin/bash
url = echo "http://maps.google.be/maps?saddr\=$1\&daddr\=$2" |  sed 's/ /%/g'
wget $url

答案1

您可以使用反引号 (`) 来计算命令并替换命令的输出,例如:

echo "Number of files in this directory: `ls | wc -l`"

在你的情况下:

wget `echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g'`

答案2

您可以使用“xargs”。一个简单的例子:

ls -1 *.c | sort -n | xargs cat

您必须注意 xargs 不会将其 stdin 拆分为命令的两个或多个调用(上例中的“cat”)。

答案3

你实际上并没有执行你的 url 行:

#!/bin/sh
url="$(echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g')"
wget $url

答案4

xargs是将一个命令的输出放入另一个命令的参数中的最佳选择。

假设 command1 的输出是3,并且您希望下一个命令将其3作为参数,您将需要这样的内容

command2 3(which is output of 1st command) 4 5

所以,为此你可以这样做

command1 | xargs -I{} command2 {} 4 5

其中 4 和 5 是 可能需要的另外两个参数command2

您可以将大括号放在您想要第一个命令输出的位置。

所以,使用

command1 | xargs -I{} command2 {} 

相关内容