情形1
i="text stack"
j="tex"
if [[ $(expr "$i" : "$j") -ne 0 ]];then
echo true
fi
情形2
i="text stack"
j="stac"
if [[ $(expr "$i" : "$j") -ne 0 ]];then
echo true
fi
情形3
i="text stack"
j="ext"
if [[ $(expr "$i" : "$j") -ne 0 ]];then
echo true
fi
仅适用于case1。在所有情况下,我怎样才能使它工作(并且回显真实)?
答案 0 :(得分:2)
expr的:
运算符是锚定的正则表达式,即只会在字符串的开头匹配(就像你的正则表达式以'^'
开头一样)。 / p>
当你使用bash的[[
内置运算符时,我会把它写成:
i="text stack"
j="stac"
if [[ "$i" =~ "$j" ]]; then
echo true
fi
=~
表示(来自bash联机帮助页) ...操作符右侧的字符串被视为扩展正则表达式并相应地进行匹配(如在regex(3)中)。如果字符串与模式匹配,则返回值为0,否则返回1.