我有一个简单的 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/