两个不同字符串的 case 语句?

发布于 2024-12-11 07:50:01 字数 291 浏览 3 评论 0原文

我不知道提出这个问题的最佳方法,但这是我想要工作的代码:

case $MESSAGE in
    ?Trcx!~*PRIVMSG*[${Nick}|${AltNick}]*[nN][mM]ap*)
       echo "Some Code";;
     *)
       echo "Some Other Code";;
esac

我将如何使它工作?不起作用的部分是 [${Nick}|${AltNick}] 我希望表达式对 $Nick 和 $AltNick 变量都有效。非常感谢任何帮助!

I don't know the best way to form this question, but here's the code I want to work:

case $MESSAGE in
    ?Trcx!~*PRIVMSG*[${Nick}|${AltNick}]*[nN][mM]ap*)
       echo "Some Code";;
     *)
       echo "Some Other Code";;
esac

How would I make it work? The part that is not working is the [${Nick}|${AltNick}] I want the expression to be valid for both the $Nick and $AltNick var. Any help is greatly appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

云归处 2024-12-18 07:50:01

Bash glob 模式记录在此处
您想要这个:@(patt1|patt2)
请注意,必须启用 extglob shell 选项。

shopt -s extglob
case $MESSAGE in
    ?Trcx!~*PRIVMSG*@(${Nick}|${AltNick})*[nN][mM]ap*)
       echo "Some Code";;
     *)
       echo "Some Other Code";;
esac

Bash glob patterns are documented here.
You want this: @(patt1|patt2).
Note the extglob shell option must be enabled.

shopt -s extglob
case $MESSAGE in
    ?Trcx!~*PRIVMSG*@(${Nick}|${AltNick})*[nN][mM]ap*)
       echo "Some Code";;
     *)
       echo "Some Other Code";;
esac
雨后咖啡店 2024-12-18 07:50:01

在 glob 模式中,如果没有 Bash 的“extglob”功能,则无法使用括号对子模式进行分组 - 当然更不能使用方括号。 Bourne 兼容的方式是分成两种不同的模式。

case $MESSAGE in
  ?Trcx!~*PRIVMSG*${Nick}*[nN][mM]ap* |
  ?Trcx!~*PRIVMSG*${AltNick}*[nN][mM]ap*)
    echo "Some Code";;
  *)
    echo "Some Other Code";;
esac

In glob patterns, without Bash's "extglob" feature, you cannot group a subpattern with parentheses - and certainly not with square brackets. The Bourne-compatible way is to split into two distinct patterns.

case $MESSAGE in
  ?Trcx!~*PRIVMSG*${Nick}*[nN][mM]ap* |
  ?Trcx!~*PRIVMSG*${AltNick}*[nN][mM]ap*)
    echo "Some Code";;
  *)
    echo "Some Other Code";;
esac
娇纵 2024-12-18 07:50:01

Bash 执行大小写模式匹配,就像文件名匹配一样,而不是正则表达式匹配。如果这就是你想要的,那么问题就解决了。

但是,如果您想要正则表达式匹配,也许您可​​以尝试 [[ expression ]] 复合命令来实现您的目标,它提供了用于正则表达式匹配的 =~ 运算符。

#!/bin/bash

regexp="^[a-z]*$"
if [[ $1 =~ $regexp ]] ; then                                                                                                                                                                   
   echo "match"
else
   echo "no match"
fi

Bash performs case pattern matching just like filename matching, not regular expression matching. If that's what you want, then problem solved.

However, if you want a regular expression match, perhaps you could try the [[ expression ]] compound command to achieve your goals, which offers the =~ operator for regular expression matching.

#!/bin/bash

regexp="^[a-z]*$"
if [[ $1 =~ $regexp ]] ; then                                                                                                                                                                   
   echo "match"
else
   echo "no match"
fi
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文