首页 > 解决方案 > 循环的正则表达式条件不适用于扩展测试

问题描述

我有一个基于正则表达式条件评估的循环:

until   read -p "Enter oprator: " operator
        [[ $operator =~ ^[+-*\/]$ ]] #doesn't work
do...

循环将一直运行,直到用户输入算术运算符(+、-、* 或 /)。当我输入这四个中的任何一个时,循环仍然运行。

我已经尝试过这种变体(即将正则表达式放在变量中,使用引号grep),但似乎没有任何效果。

标签: bash

解决方案


^[+-*\/]$ ]]$

这里的问题是在括号表达式中间放置一个未转义的符号-,它充当 和 之间的+范围*

您可以使用这个正则表达式(无需/在 BASH 正则表达式中转义):

[[ $operator =~ ^[-+*/]$ ]]

或者甚至更好,没有正则表达式使用 glob 匹配:

[[ $operator == [-+*/] ]]

推荐阅读