【问题标题】:Regex not equal operator?正则表达式不等于运算符?
【发布时间】:2021-06-04 13:56:45
【问题描述】:

如果 NAMESPACE 变量为空或 VERSION 变量与正确的模式不匹配,我将尝试返回一个函数。

# return usage if namespace is blank or version doesn't match the version format.
if [[ "$NAMESPACE" == "" || "$VERSION" =~ ^([0-9]\.([1-9]|[1-9][0-9])\.[0-9])$ ]];
    then
        usage
fi

目前我正在使用=~,如果模式是 x.xx.x 或 x.x.x,它会返回 true。但我很难找到运算符的不相等(类似于!=~

【问题讨论】:

  • ! "$VERSION" =~ ^([0-9]\.([1-9]|[1-9][0-9])\.[0-9])$

标签: regex bash if-statement


【解决方案1】:

您可以在|| 之后为(A OR NOT B) 取反:

if [[ "$NAMESPACE" == "" || ! "$VERSION" =~ ^([0-9]\.([1-9]|[1-9][0-9])\.[0-9])$ ]];
    then
        usage
fi

请注意,! 周围需要有空格。

或者,您可以将(A OR NOT B) 反转为NOT (NOT A AND B)

if ! [[ "$NAMESPACE" != "" && "$VERSION" =~ ^([0-9]\.([1-9]|[1-9][0-9])\.[0-9])$ ]];
    then
        usage
fi

【讨论】:

  • @Eric Paulsen:这符合您的需求吗?任何问题?愿意接受答案吗?请参阅答案旁边的灰色复选标记。