Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
304 views
in Technique[技术] by (71.8m points)

Blank variable during bash command substitution

I am doing command substitution and saving the result to a variable. However, the results of the command contain double quotes and this is causing the variable to be empty.

When running test="$(java -version)" I get the following result:

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)

However running echo $test yields a blank line.

question from:https://stackoverflow.com/questions/65934844/why-using-command-substitution-with-readelf-it-prints-its-output-to-the-stdout

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The reason that test="$(java -version)" prints the result to the terminal directly is that java -version outputs to standard error (stderr), not standard output (stdout).

Because there is no stdout output (which is what $(...) captures), $test is assigned an empty string.

The solution is to redirect standard error (stderr) to standard output (stdout).

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...