微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在匹配两个表达式的 case 语句中执行模式

如何解决在匹配两个表达式的 case 语句中执行模式

#!/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+A|a) hw;;
    1+B|b) h0;;
    2+A|a) h3w;;
    2+B|b) h30;;
    5) echo "You have chosen to exit script" && exit 1;;
esac

我如何将输入 helloworld1 与 case 语句匹配。所以它可以找到匹配。 例如,如果我为第一个输入输入 1,为第二个输入输入 a。我如何匹配两个输入以找到输出hwhello world

解决方法

您可以使用方括号查找一组字符中的一个:

$ foo=1; bar=B
$ option=$foo+$bar
$ case $option in 1+[bB]) echo 1b;; esac
1b

交替将应用于整个模式,即 1+A|a 查找 1+Aa 但不查找 1+a

尽管在这种情况下,我会分别生成“hello”/“h3ll0”和“world”/“w0r16”。您仍然总共有四个案例,但可以在生成字符串时节省重复。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。