如何在Linux中使用单行命令获取Java版本

我想用一个命令在Linux中获取Java版本。

我是awk的新手,所以我正在尝试类似的东西

java -version|awk '{print$3}' 

但是,这不会返回版本。 我如何从下面的Java版本输出获取1.6.0_21

 java version "1.6.0_21" Java(TM) SE Runtime Environment (build 1.6.0_21-b06) Java HotSpot(TM) 64-Bit Server VM (build 17.0-b16, mixed mode) 
  1. 将stderrredirect到stdout。
  2. 获得第一线
  3. 过滤版本号。

     java -version 2>&1 | head -n 1 | awk -F '"' '{print $2}' 

这是一个微小的变化,但PJW的解决scheme并不适合我:

 java -version 2>&1 | head -n 1 | cut -d'"' -f2 

只是削减分隔符的string" (双引号),并获得第二个领域。

我build议使用grep -i version ,以确保你得到正确的行包含版本string。 如果您设置了环境variablesJAVA_OPTIONS,则在打印版本信息之前,openjdk将打印java选项。 这个版本返回1.6,1.7等

 java -version 2>&1 | grep -i version | cut -d'"' -f2 | cut -d'.' -f1-2 

因为(至less在我的linux系统上)版本string看起来像“1.8.0_45”:

  #!/bin/bash function checkJavaVers { for token in $(java -version 2>&1) do if [[ $token =~ \"([[:digit:]])\.([[:digit:]])\.(.*)\" ]] then export JAVA_MAJOR=${BASH_REMATCH[1]} export JAVA_MINOR=${BASH_REMATCH[2]} export JAVA_BUILD=${BASH_REMATCH[3]} return 0 fi done return 1 } #test checkJavaVers || { echo "check failed" ; exit; } echo "$JAVA_MAJOR $JAVA_MINOR $JAVA_BUILD" ~