String包含正确的java版本

时间:2017-07-19 09:20:58

标签: bash

我是Bash的新手,检查变量时遇到问题包含字符串

使用:

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。

1 个答案:

答案 0 :(得分:3)

问题是java -version将信息打印到stderr(2)流而不是stdout(1)。您需要将它们捕获为2>&1,其中字面意思表示将标准错误输出流写入标准输出流。

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

将按预期工作。

另外,对于此比较,您没有正则表达式运算符,使用glob运算符test进行简单的[[比较就足够了,

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