You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本中case语句如何实现两个输入变量的组合匹配

Bash case 语句组合匹配修正方案

原脚本核心问题

  • 分支模式逻辑错误:如1+A|a的写法,在bash case规则中会被拆解为两个独立匹配目标:要么匹配完整字符串1+A,要么匹配单独字符串a,完全无法实现“第一输入为1、第二输入为任意大小写A”的组合匹配。
  • 大小写覆盖不足:原有模式仅匹配大写A/B输入,用户输入小写a/b时无法触发对应分支。
  • 退出分支失效:option是两个输入用+拼接的格式,即使第一个输入为5,实际值为5+xxx,永远匹配不上单独的5规则。

调整思路

  • 用bash标准通配符构造组合匹配规则:针对第二输入的大小写场景,用[Aa]、[Bb]的通配格式覆盖任意大小写输入,避免错误使用|分隔符打乱组合逻辑。
  • 调整退出分支的匹配规则,兼容第一个输入为5时,第二个输入任意值的场景。
  • 补充默认兜底分支,对无效输入给出明确提示。

修正后完整代码

#!/bin/bash
hw() {
        echo "hello world"
}

h0() {
        echo "hello w0r16"
}

h3w() {
        echo "h3ll0 world"
}

h30() {
        echo "h3110 w0rld"
}


read -p "enter 1 for hello and 2 for h3110: " hello
read -p "enter A for world and B for w0r16: " world1

option=$hello+$world1

case $option in 
    1+[Aa]) hw;;
    1+[Bb]) h0;;
    2+[Aa]) h3w;;
    2+[Bb]) h30;;
    5+*) echo "You have chosen to exit script" && exit 1;;
    *) echo "Invalid input combination";;
esac

可选简化方案

如果使用bash 4.0及以上版本,可以在拼接option前将两个输入统一转换为大写,省略每个分支的大小写通配写法:

# 拼接option前增加大小写统一转换
hello=${hello^^}
world1=${world1^^}
option=$hello+$world1

case $option in 
    1+A) hw;;
    1+B) h0;;
    2+A) h3w;;
    2+B) h30;;
    5+*) echo "You have chosen to exit script" && exit 1;;
    *) echo "Invalid input combination";;
esac

两种方案实现效果完全一致,可根据个人编码习惯选择。


内容的提问来源于stack exchange,提问作者User10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 16:24:02