我用[a-z][0-9]
的形式得到了很多可能的变量,比如一个字母和一个数字。有办法用破折号测试他们吗?类似于:
myvar=o7
if [ $myvar=o[0-4] ]; then
"do this"
elif [ $myvar=o[5-7] ]; then
"do that"
fi
Thx预先:)
发布于 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
复制相似问题