2015-02-11 89 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