破折号中的变量正则表达式测试?

破折号中的变量正则表达式测试?

我得到了很多可能的变量,其形式为[a-z][0-9],例如 1 个字母和 1 个数字。有没有办法在破折号中测试它们?就像是:

myvar=o7
if [ $myvar=o[0-4] ]; then 
"do this"
elif [ $myvar=o[5-7] ]; then
"do that"
fi

提前谢谢:)

答案1

您不需要正则表达式来完成您想要做的事情:

case $myvar in
    o[0-4])
        echo 'do this'
        ;;
    o[5-7])
        echo 'do that'
        ;;
    *)
        echo 'unsupported case'
esac

或者,更紧凑的是,

case $myvar in
    o[0-4]) echo 'do this' ;;
    o[5-7]) echo 'do that' ;;
    *)      echo 'unsupported case'
esac

在这里,该值$myvar依次与每个给定的 case 标签进行匹配,并且将执行与第一个匹配的标签对应的代码。将;;标签的代码与下一个标签分隔开(这意味着最后一个标签不需要 ;;在 的末尾之前esac)。

每个标签都是形式上的通配符模式pattern)(pattern),而不是正则表达式。

case...esac结构提供了一种标准且紧凑的方法来执行某些操作,也可以写成

if [[ $myvar == o[0-4] ]]; then
    echo 'do this'
elif [[ $myvar == o[5-7] ]]; then
    echo 'do that'
else
    echo 'unsupported case'
fi

和类似的贝壳中bash

相关内容