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

IF statement not working in RHEL 6 (workd in RHEL 5)

我有一个简单的 if 语句,在 RHEL 5 中运行良好,但由于某些莫名其妙的原因,在 RHEL 6 中失败了:

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

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

正则表达式 不能在较新的 BASH 中引用(从 BASH 版本 3.2 开始),试试这个:

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

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

shopt -s compat31

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

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