解释

解释

为什么当我这样做时:$ var=$(java -version)在我的 bash 终端上,var总是空的?同样的事情,$ java -version >> version.txt没有任何内容发送到 version.txt 文件。

答案1

该命令通常将此类信息发送到 STDERR,而不是STDOUT。因此,对于您的情况,您应该使用如下命令:

java -version >>version.txt 2>&1

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

答案2

正如罗密欧所指出的,java -version他写道标准错误,不在标准输出,因此您应该使用:

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

如果您只想获取版本而不是命令的所有输出java -version,例如,为了更方便编写脚本,您可以使用以下命令:

var=$(java -version 2>&1 | awk -F '"' 'NR==1 {print $2}')

解释

  1. java -version将 Java 版本信息打印到标准错误
  2. 2>&1重定向标准错误标准输出
  3. |获取左侧命令的输出并将其用作右侧命令的输入
  4. awk -F '"' 'NR==1 {print $2}'有点复杂,但基本上它将收到的输入分成几部分,允许您分别对每个部分进行操作(最有知识的人可能会把我扔给狮子,这是对 awk 是什么以及做什么的非常糟糕的总结)。
    • awk用于除法的字符由-F选项指定,在本例中,它除以字符"
    • 最后一部分指定仅必须打印结果除法的{print $2}第一行()中的第二个元素() 。NR==1

这将输出类似的内容1.8.0_191

相关内容