Axe*_*xel 3 shell text-processing command-substitution variable
我希望将svn info命令的输出,更准确地说是将修订号存储到变量中以供进一步处理。我只需要4存储。
$ svn info
[...]
Revision: 4
[...]
Run Code Online (Sandbox Code Playgroud)
awk 对此很有效:
rev=$(svn info | awk '/Revision:/{print $2}')
Run Code Online (Sandbox Code Playgroud)
上面的代码使用命令替换,$(...)来捕获命令的输出并将其分配给一个变量。
在上面的代码中,awk 读取 的输出svn info并等待包含字符串的行Revision:。找到该行后,它会打印该行上的第二个字段,即修订号。
也可以使用 sed 来做到这一点:
rev=$(svn info | sed -n '/Revision:/ s/.* //p')
Run Code Online (Sandbox Code Playgroud)
使用该-n选项,sed 只会在我们明确要求时打印。 /Revision:/选择包含字符串的行Revision:。对于这些行,执行替换命令,删除行上最后一个空格之前的所有字符,然后,由于该p选项,该行被打印。
while read -r name value
do
[ "$name" = Revision: ] && var="$value"
done < <(svn info)
Run Code Online (Sandbox Code Playgroud)
上述用途从redirection(重定向)过程substition,< <(...)到的输出提供svn info到一while循环。对于循环的每次迭代,该行的第一个单词被分配给name,该行的其余部分被分配给value。如果name是Revision:,则将 shell 变量var分配给value,即修订号。
许多(但不是全部)shell 支持进程替换。如上所述,当重定向与进程替换相结合时,两者之间的空间<是必不可少的。