2016-12-18 7 views
0

私はコマンド置換を行い、結果を変数に保存しています。ただし、コマンドの結果に二重引用符が含まれているため、変数が空になっています。bashコマンド置換時のブランク変数

test="$(java -version)"を実行しているとき、私は次のような結果を得る:しかしecho $testを実行している

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) 

は空白行を生成します。

+5

情報のようなサウンドは、stdoutの代わりにstderrに書き込まれます。あなたは 'test =" $(java -version 2>&1) "' –

答えて

3

test="$(java -version)"が端末に直接結果を出力するのは、java -versionが標準出力(stdr)に出力され、標準出力(stdout)に出力されないためです。

がキャプチャするstdout出力がないため、$testに空の文字列が割り当てられます。

解決方法は、標準エラー(stderr)を標準出力(stdout)にリダイレクトすることです。

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

私のマシンでは、この式は1.8.0_102です。

+0

を使うことができます。 – shavi

関連する問題