regex - IF 语句在 RHEL 6 中不起作用(在 RHEL 5 中起作用)

标签 regex bash if-statement rhel

我有一个简单的 if 语句,在 RHEL 5 中运行良好,但由于某些无法解释的原因,在 RHEL 6 中失败:

if [[ ! $1 =~ "(one|two|three)" ]] ; then
    echo -e "\n***Invalid number"
    usage
    exit 1
else
    action=$1
fi  

我可以使用一个可以正常工作的 case 语句,也可以重写它,但最重要的是,我很好奇发生了什么变化,假设它是 RHEL 的版本而不是其他版本?

最佳答案

正则表达式不得在较新的 BASH 中引用(从 BASH 版本 3.2 开始),请尝试以下操作:

if [[ ! "$1" =~ (one|two|three) ]] ; then
    echo -e "\n***Invalid number"
    usage
    exit 1
else
    action="$1"
fi 

为了能够使用引用的正则表达式,您可以使用:

shopt -s compat31

编辑:正如 Glen 在下面评论的那样,您也可以使用 !~ 运算符,即

[[ "$1" !~ (one|two|three) ]] 

关于regex - IF 语句在 RHEL 6 中不起作用(在 RHEL 5 中起作用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30239359/

相关文章:

javascript - 在 Javascript 中使用正则表达式获取搜索词后的单词

regex - Linux递归地用下划线替换所有目录的句点和除最后一个句点之外的所有文件

bash - 使用 bash_profile 设置环境变量,但 echo 不返回

bash - 如何将 PostgreSQL 结果插入 shell 变量

c - 在华氏、摄氏和开尔文之间转换的程序

java - 正则表达式在循环中使用 find 方法仅匹配一次

java - 将字符串格式化为特定精度时遇到问题

linux - Bash:我自己的退出过程

c++ - 为什么 if else 结构在 C++ 中不起作用?

java/startsWith 不止一个字母?