![破折号中的变量正则表达式测试?](https://linux22.com/image/180935/%E7%A0%B4%E6%8A%98%E5%8F%B7%E4%B8%AD%E7%9A%84%E5%8F%98%E9%87%8F%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%B5%8B%E8%AF%95%EF%BC%9F.png)
我得到了很多可能的变量,其形式为[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
。