bash命令替换期间的空白变量

bash命令替换期间的空白变量,bash,command-substitution,Bash,Command Substitution,我正在执行命令替换并将结果保存到变量中。但是,该命令的结果包含双引号,这导致变量为空 运行test=“$(java-version)”时,我得到以下结果: openjdk version "1.8.0_65" OpenJDK Runtime Environment (build 1.8.0_65-b17) OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode) 但是运行echo$test会产生一个空行。将结果直接打印到终端的原因是java-

我正在执行命令替换并将结果保存到变量中。但是,该命令的结果包含双引号,这导致变量为空

运行
test=“$(java-version)”
时,我得到以下结果:

openjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)

但是运行
echo$test
会产生一个空行。

将结果直接打印到终端的原因是
java-version
输出到标准错误(stderr),而不是标准输出(stdout)

因为没有标准输出(这是
$(…)
捕获的),所以
$test
被分配了一个空字符串

解决方案是将标准错误(stderr)重定向到标准输出(stdout)


听起来像是信息被写入了stderr而不是stdout。您可以使用
test=“$(java-Version2>&1)”
version=$(java -version 2>&1)