我是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。
答案 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