You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法将Bash命令替换的输出存储为变量?

问题原因与解决方案

核心问题:输出流向的差异

java -XshowSettings:properties -version命令的输出分为两类流向:

  • XshowSettings:properties的配置信息输出到标准输出(stdout)
  • -version的版本信息输出到标准错误(stderr)

Bash的命令替换$(...)默认只捕获stdout的内容,stderr的内容会直接打印到终端,不会被存入变量。这就是你看到命令输出直接显示、变量为空的根本原因。

解决方法:合并输出流向

修改命令替换部分,把stderr的内容重定向到stdout,让命令替换能捕获所有输出:

settings_output="$(${java_command} -XshowSettings:properties -version 2>&1)"
echo "Output: ${settings_output}"

这里的2>&1是Bash重定向语法:2代表stderr,1代表stdout,该操作将stderr的内容合并到stdout中,这样所有输出都会被存入变量。

提取Java版本和厂商的实用技巧

既然已经捕获了完整输出,你可以直接从配置属性中提取标准的版本和厂商信息,比解析版本字符串更可靠:

# 提取Java版本
java_version=$(echo "$settings_output" | grep '^    java.version = ' | awk -F ' = ' '{print $2}')
# 提取Java厂商
java_vendor=$(echo "$settings_output" | grep '^    java.vendor = ' | awk -F ' = ' '{print $2}')

echo "Java版本: $java_version"
echo "Java厂商: $java_vendor"

内容的提问来源于stack exchange,提问作者Jacusaurus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:33:12