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

use*_*282 59 variables bash store

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

foo=$(bar)
# or
foo=`bar`
Run Code Online (Sandbox Code Playgroud)

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

我做了:

version=$(java --version)
Run Code Online (Sandbox Code Playgroud)

这不会将值存储在var中.它甚至还会打印它,实际上并非如此.

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

use*_*own 69

 version=$(java -version 2>&1)
Run Code Online (Sandbox Code Playgroud)

版本参数只需要一个破折号,如果重定向stderr,即写入消息的位置,您将获得所需的结果.

作为旁注,使用两个短划线是Unix系统上的一个非官方标准,但由于Java试图在不同平台上几乎完全相同,它违反了Unix/Linux期望并且在这方面的行为与在Windows上一样,并且因为我怀疑,在Mac OS上.

  • @ user1527227:你可以测试一下. (3认同)

Era*_*tan 15

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

version=$(java -version 2>&1)
Run Code Online (Sandbox Code Playgroud)

为了重定向stderrstdout.

您可以通过运行以下两个命令来查看它:

java -version > /dev/null

java -version 2> /dev/null
Run Code Online (Sandbox Code Playgroud)