将特定输出存储到 shell 变量

Axe*_*xel 3 shell text-processing command-substitution variable

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

$ svn info
[...]
Revision: 4
[...]
Run Code Online (Sandbox Code Playgroud)

Joh*_*024 5

使用 awk

awk 对此很有效:

rev=$(svn info | awk '/Revision:/{print $2}')
Run Code Online (Sandbox Code Playgroud)

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

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

使用 sed

也可以使用 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。如果nameRevision:,则将 shell 变量var分配给value,即修订号。

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