如何在 bash 脚本中使用正则表达式否定两个逻辑测试?

Posted

技术标签:

【中文标题】如何在 bash 脚本中使用正则表达式否定两个逻辑测试?【英文标题】:How do I negate two logic tests with regular expressions in a bash script? 【发布时间】:2017-09-21 18:34:45 【问题描述】:

在bash中,我们想做如下逻辑:如果变量"$SLACK"TRUE并且$OUTPUT不等于"mysql: [Warning] Using a password on the command line interface can be insecure",调用slack_it函数。

我已经尝试了How do I negate a test with regular expressions in a bash script?、Check if a string matches a regex in Bash script 此处的帖子提供的十几种解决方案,但没有一个有效。有哪位大师能开导吗?

#!/bin/bash

if [ "$SLACK" == "TRUE" ]
   then
        if ! [[ $OUTPUT =~ "*mysql: [Warning] Using a password on the command line interface can be insecure*" ]]
            then
                slack_it
        fi
  fi

【问题讨论】:

我很好奇你为什么要使用正则表达式。听起来你让它在没有正则表达式的情况下工作。为什么要把事情复杂化?还是这是一种思维练习? 【参考方案1】:

星星需要在引号之外。

另外,=~ 运算符用于正则表达式,== 用于全局。

所以:

if ! [[ $OUTPUT == *"mysql: [Warning] Using a password on the command line interface can be insecure"* ]]; then
    slack_it
fi

【讨论】:

【参考方案2】:

您的问题似乎与前导和尾随 * 有关。试试:

if ! [[ $OUTPUT =~ "mysql: [Warning] Using a password on the command line interface can be insecure" ]]; then
  slack_it
fi

【讨论】:

你也can't use quotes when matching regular expressions in Bash,否则它会强制字符串匹配。将正则表达式保存到变量似乎是首选的解决方法。

以上是关于如何在 bash 脚本中使用正则表达式否定两个逻辑测试?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 bash 脚本中使用正则表达式?

bash脚本编程与正则表达式

如何否定正则表达式中的特定单词? [复制]

bash:在 shell 脚本中使用正则表达式查找和 grep

如何在 JavaScript 字符串替换中否定匹配正则表达式? [复制]

使用 linux 和 AIX 的正则表达式替换 bash 脚本中的字符串