我用[a-z][0-9]的形式得到了很多可能的变量,比如一个字母和一个数字。有办法用破折号测试他们吗?类似于:
myvar=o7
if [ $myvar=o[0-4] ]; then
"do this"
elif [ $myvar=o[5-7] ]; then
"do that"
fiThx预先:)
发布于 2020-09-28 20:33:51
您不需要正则表达式来完成您想要做的事情:
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依次与每个给定的大小写标签相匹配,并且将执行与第一个匹配的标签对应的代码。;;从下一个标签中分隔标签的代码(这意味着最后一个标签在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和类似的shell中。
https://unix.stackexchange.com/questions/611900
复制相似问题