bourne shell脚本中的正则表达式匹配运算符是什么?

时间:2014-12-09 07:46:46

标签: shell unix sh

我正在尝试针对正则表达式验证用户输入。

vari=A
if [ $vari =~ [A-Z] ] ;
then
    echo "hurray"
fi

我得到的输出是swf.sh [3]:=〜:未知的测试操作符。

请告诉我可以使用的测试操作员吗?

3 个答案:

答案 0 :(得分:8)

它没有内置,你需要使用grep:

if echo "$vari" | grep -q '[A-Z]'; then
    echo hurray
fi

如果要匹配整个字符串,请记住使用正则表达式锚点^$。请注意,-q标志使grep变得安静,因此它的唯一输出是返回值,用于匹配/不匹配。

答案 1 :(得分:1)

POSIX shell没有正则表达式运算符(或者更确切地说,POSIX test命令没有)。相反,您使用expr命令执行(有限的)正则表达式匹配。

if expr "$vari" : '[A-Z]' > /dev/null; then

(我说“有限”因为它总是在字符串的开头匹配,就像正则表达式以^开头一样。)如果匹配,则退出状态为0;它还会写入与标准输出匹配的字符数,因此重定向到/dev/null

如果您实际使用bash,则需要使用[[命令:

if [[ $vari =~ [A-Z] ]]; then

答案 2 :(得分:0)

尝试如下:

if [[ $vari =~ "[A-Z]" ]]
then
    echo "hurray"
fi