2016-12-18 38 views
0

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

当运行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产生一个空行。

+5

声音像信息写入标准错误而不是标准输出,因为它应该。你可以使用'test =“$(java -version 2>&1)”' –

回答

3

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

因为没有标准输出(这是$(...)捕获的内容),因此$test被分配一个空字符串。

解决的办法是将标准错误(stderr)重定向到标准输出(stdout)。

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

在我的机器上,这个表达式产生1.8.0_102

+0

完美运行,谢谢! – shavi