Bash 中的动态 Case 语句

发布于 2024-12-10 22:23:02 字数 357 浏览 0 评论 0原文

我将如何编写:

PreviousInput='@(User1 | User2 | User3)*#channel'
###############################
Expression="*${PreviousInput}*"
case $Input in
    $Expression ) 
        Do_Something ;;
    *)
        Do_Something_Else ;;
esac

我真的很想使用 case 语句,因为我已经在 case 语句中投入了很多逻辑,并且真的不想重写它。我在想,我可以以某种方式使用全局模式,但真的不知道该怎么做。有什么建议吗?任何帮助表示赞赏。

How would I go about writing:

PreviousInput='@(User1 | User2 | User3)*#channel'
###############################
Expression="*${PreviousInput}*"
case $Input in
    $Expression ) 
        Do_Something ;;
    *)
        Do_Something_Else ;;
esac

I would really like to use a case statement because I have a lot of logic already invested in the case statement, and really don't want to rewrite it. I was thinking that somehow I could use glob patterns, but don't really know how I would do that. Any suggestions? Any help is appreciated.

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

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

发布评论

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

评论(1

半枫 2024-12-17 22:23:02

bash 手册说:

每个检查的模式都使用波形符扩展、参数和
变量扩展、算术替换、命令替换、
和流程替换。

因此,我不认为您的示例不应该完全等同于

case $Input in
    *@(User1 | User2 | User3)*#channel* ) 
        Do_Something ;;
    *)
        Do_Something_Else ;;
esac

只要您设置了 shopt -s extglob 即可执行您想要的操作,正如 shellter 所说。

The bash manual says:

Each pattern examined is expanded using tilde expansion, parameter and
variable expansion, arithmetic substitution, command substitution,
and process substitution.

So I don't see any reason that your example shouldn't be exactly equivalent to

case $Input in
    *@(User1 | User2 | User3)*#channel* ) 
        Do_Something ;;
    *)
        Do_Something_Else ;;
esac

which should do what you want as long as you have shopt -s extglob set, as shellter says.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文