2015-02-11 84 views
0

任何人都可以看到我在這裏做錯了嗎?Bash檢查java版本 - 沒有正確比較字符串

local VERSION=$(java -version 2>&1 | grep "java version") 
if [[ ! "$VERSION" =~ *"1.8.0_33"* ]]; then 
    ERROR (not code, just place holder) 
else 
    NO ERROR (not code, just place holder) 
fi 

感謝您的快速幫助!

* UPDATE *

這裏是還有什麼我曾嘗試:

local VERSION=$(java -version 2>&1 | grep "java version") 
if [[ "$VERSION" != *"1.8.0_33"* ]]; then 
    Error blah blah not using 1.8.0_33 
else 
    Good to go 
fi 

這是一個功能全部由自己。沒有其他嵌套的東西。

GNU的bash,版本4.2.37(1)-release(手臂未知的Linux gnueabihf)

+1

只是使用:'[['$ VERSION「!= *」1.8.0_33「*]]' – anubhava 2015-02-11 17:10:17

+0

是的,我試過,以及沒有運氣似乎 – Atomiklan 2015-02-11 17:12:38

+0

你真的看過什麼'$ VERSION'包含? – arco444 2015-02-11 17:13:24

回答

1

VERSION值(你不應該的方式使用ALL_CAPS變量,那些被 「保留」對於外殼/等使用)是整行匹配'java版本'。

這不會匹配簡單的版本字符串。

如果你想要做這樣的事情,你只需要從匹配行中取出版本。

=~的RHS是一個正則表達式而不是glob。那就是你需要.*而不是*來匹配任何東西。

或者,正如anubhava正確指出的那樣,您可以直接使用[[!=通配。

[[ "$VERSION" != *"\"1.8.0_33\""* ]] 

我逃出加引號的比賽,因爲從java -version輸出似乎有他們,否則這也符合1.8.0_333

+0

好吧,看看我的編輯然後 – Atomiklan 2015-02-11 17:05:21

+0

對不起,沒有變化 – Atomiklan 2015-02-11 17:21:42

0

使用grep

VERSION=$(java -version 2>&1 | grep "java version") 
if echo "$VERSION" | grep "1.8.0_33"; then 
    NO ERROR (not code, just place holder) 
else 
    ERROR (not code, just place holder) 
fi 

grep將退出與0如果輸出任何行,那麼將在if執行該操作,否則將運行else下的代碼。

+0

不,這似乎總是如此。 – Atomiklan 2015-02-11 17:07:37

+0

...?您使用的是什麼版本的bash/grep? – arco444 2015-02-11 17:09:17

+0

這應該可以正常工作(儘管您可能希望使用'\ .'來避免匹配非期間) – 2015-02-11 17:10:06