将特定输出存储到 shell 变量

将特定输出存储到 shell 变量

我希望将svn info命令的输出(更准确地说是将修订号)存储到变量中以供进一步处理。我只需要4存储的。

$ svn info
[...]
Revision: 4
[...]

答案1

使用 awk

awk 对此很有效:

rev=$(svn info | awk '/Revision:/{print $2}')

上面的代码使用命令替换$(...)、 捕获命令的输出并将其分配给变量。

在上面的代码中,awk 读取 的输出svn info并等待包含字符串 的行Revision:。当找到该行时,它会打印该行的第二个字段,即修订号。

使用 sed

也可以使用 sed 来完成此操作:

rev=$(svn info | sed -n '/Revision:/ s/.* //p')

使用该-n选项,sed 仅在我们明确要求时才打印。 /Revision:/选择包含字符串 的行Revision:。对于这些行,执行替换命令,删除该行中直到最后一个空白的所有字符,然后根据该p选项,打印该行。

使用外壳

while read -r name value
do 
    [ "$name" = Revision: ] && var="$value"
done < <(svn info)

上面使用了重定向流程替代< <(...)、 将 的输出提供svn info给 while 循环。对于循环的每次迭代,该行的第一个单词被分配给name,该行的其余部分被分配给value。如果nameRevision:,则 shell 变量var被分配给value,这是修订号。

许多(但不是全部)shell 支持进程替换。如上所述,当重定向与进程替换相结合时,两者之间的空间<至关重要。

相关内容