2017-07-19 165 views
1

我是新來的Bash的正確版本,並有一個問題,檢查變量包含字符串字符串包含Java

作品:

foo="abc def ghi" 

if [[ "$foo" =~ "def" ]]; then 
    echo "Match!" 
fi 

不工作(問題我遇到):

javaVersion="$(java -version)" 

if [[ "$javaVersion" =~ "1.8.0_74" ]]; then 
    echo "Match!" 
fi 

我已經手動檢查變量包含字符串1.8.0_74。

回答

3

問題是java -version打印信息到stderr(2)流而不是stdout(1)。你需要抓住他們都爲2>&1字面意思寫入標準錯誤輸出流到標準輸出流。

javaVersion="$(java -version 2>&1)" 
if [[ "$javaVersion" =~ "1.8.0_74" ]]; then 
    echo "Match!" 
fi 

將按預期工作。

你也做不成這個比較的正則表達式運算符,使用test操作[[就足夠了一個簡單的比較glob

if [[ "$javaVersion" == *"1.8.0_74"* ]]; then 
    echo "Match!" 
fi