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 <v4]