2016-12-18 5 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

정보와 같은 소리는 표준 출력 대신 stderr에 기록됩니다. 'test = "$ (java -version 2> & 1)"를 사용할 수 있습니다. " –

답변

3

test="$(java -version)"이 결과를 터미널에 직접 인쇄하는 이유는 표준 출력 (stdout)이 아닌 표준 오류 (stderr)로 java -version가 출력된다는 것입니다.

이 캡처하는 stdout 출력이 없기 때문에 $test에는 빈 문자열이 할당됩니다.

해결 방법은 표준 오류 (stderr)를 표준 출력 (stdout)으로 리디렉션하는 것입니다.

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

내 컴퓨터에서이 표현식은 1.8.0_102을 산출합니다.

+0

완벽하게 작동했습니다. 감사합니다! – shavi