Bash 脚本将命令输出存储到变量中

Posted

技术标签:

【中文标题】Bash 脚本将命令输出存储到变量中【英文标题】:Bash script store command output into variable 【发布时间】:2012-04-03 19:46:11 【问题描述】:

我有一个关于将命令的输出存储在 bash 脚本中的变量中的问题。 我知道一般有两种方法可以做到这一点

要么

foo=$(bar)
# or
foo=`bar`

但对于 Java 版本查询,这似乎不起作用。

我做到了:

version=$(java --version)

这不会将值存储在 var 中。它甚至仍然会打印它,这真的不应该是这样。

我也尝试将输出重定向到文件,但这也失败了。

【问题讨论】:

方法不止两种。阅读 foo 【参考方案1】:
 version=$(java -version 2>&1)

版本参数只需要一个破折号,如果你重定向stderr,也就是消息写入的地方,你会得到想要的结果。

作为旁注,使用两个破折号是类 Unix 系统上的非官方标准,但由于 Java 试图在不同平台上几乎相同,它违反了 Unix/Linux 的期望,并且在这方面的行为与 Windows 相同,正如我所怀疑的,在 Mac OS 上。

【讨论】:

怎么知道输出是写到stderr还是stdout? @user1527227:你可以测试一下。 有点晚了,谢谢!!【参考方案2】:

这是因为java -version 写入stderr 而不是stdout。你应该使用:

version=$(java -version 2>&1)

为了将stderr重定向到stdout

运行以下2条命令即可查看:

java -version > /dev/null

java -version 2> /dev/null

【讨论】:

谢谢你的洞察力,似乎top也打印了stderr版本

以上是关于Bash 脚本将命令输出存储到变量中的主要内容,如果未能解决你的问题,请参考以下文章

bash 脚本编程七 将命令输出保存到变量中

期望脚本:获取 bash 命令的输出并设置变量

如何在不创建子外壳的情况下将命令的输出存储在变量中 [Bash <v4]

将命令的输出存储在变量中[重复]

Linux Shell 脚本:将命令输出保存在变量/文件中?

根据退出代码bash脚本将命令重定向到变量或文件?