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