Bash:在脚本中找到;关于'* 0 \ rejected *'

时间:2018-01-09 13:54:27

标签: bash

我正在设置Check_MK以监控PowerDNS。 我发现this script并且它运行正常。

但是,我在其中看到了*0\ rejected**0\ removed*

if  [[ "$REDISCOVER" == *0\ rejected*  &&  "$REDISCOVER" == *0\ removed* ]]; then

我正在学习Bash脚本,但我以前从未见过这个。

有人可以解释它究竟是做什么的吗?

2 个答案:

答案 0 :(得分:2)

在Bash ==中使用[[ ... ]]时,会执行pattern matching。在您的情况下,只有当"$REDISCOVER"同时匹配模式*0\ rejected**0\ removed*时,测试才会通过。

模式*0\ rejected*匹配以下字符串:

  • *:前面有零个或多个字符;
  • 0\ rejected:包含字符串0 rejected(反斜杠用于转义空格,因此它被视为模式的一部分);
  • *:后跟零个或多个字符。

或者更简单地说,[[ "$REDISCOVER" == *0\ rejected* ]]检查变量REDISCOVER是否包含字符串0 rejected

同样适用于*0\ removed*

将使测试通过的REDISCOVER的有效值示例为:

0 rejected0 removed           # most simple case;
0 removed0 rejected           # order does not matter;
...0 rejected...0 removed...  # there can be arbitrary garbage before,
                              # between or after the two

答案 1 :(得分:1)

每个模式都匹配字符串中某处包含0 rejected(或0 removed)的任意字符串。反斜杠用于引用空格,优先于*0" "rejected。引用整个字符串"*0 rejected*"将无法正常工作,因为通配符将按字面处理,而不是匹配任意字符串。