在这种情况下如何使用expr函数[Linux]

时间:2011-08-12 17:06:58

标签: linux bash

情形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。在所有情况下,我怎样才能使它工作(并且回显真实)?

1 个答案:

答案 0 :(得分:2)

expr的:运算符是锚定的正则表达式,即只会在字符串的开头匹配(就像你的正则表达式以'^'开头一样)。 / p>

当你使用bash的[[内置运算符时,我会把它写成:

i="text stack"
j="stac"
if [[ "$i" =~ "$j" ]]; then
  echo true
fi

=~表示(来自bash联机帮助页) ...操作符右侧的字符串被视为扩展正则表达式并相应地进行匹配(如在regex(3)中)。如果字符串与模式匹配,则返回值为0,否则返回1.