我希望将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
。如果name
是Revision:
,则 shell 变量var
被分配给value
,这是修订号。
许多(但不是全部)shell 支持进程替换。如上所述,当重定向与进程替换相结合时,两者之间的空间<
至关重要。