【问题标题】:IF statement not working in RHEL 6 (workd in RHEL 5)IF 语句在 RHEL 6 中不起作用(在 RHEL 5 中起作用)
【发布时间】:2015-07-26 04:32:19
【问题描述】:

我有一个简单的 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 版本而不是其他版本?

【问题讨论】:

    标签: regex bash if-statement rhel


    【解决方案1】:

    正则表达式不能在较新的 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
    

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

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

    【讨论】:

    • 你可以用!~代替! ... =~
    • 保持脚本跨版本兼容的最佳方法是使用变量re='(one|two|three)',然后使用[[ $1 !~ $re ]]
    • 谢谢大家...很高兴知道。尽管!~ 似乎不起作用。我会玩这个。
    • 等等,哦,我错过了变量周围的引号。面对手掌。
    猜你喜欢
    • 2017-05-22
    • 2016-06-24
    • 1970-01-01
    • 2015-05-12
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多