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

Bash 在匹配两个表达式的case语句中执行模式,bash,unix,scripting,Bash,Unix,Scripting,如何将输入hello和world1与case语句匹配。这样它就能找到匹配的。 例如,如果我为第一个输入输入1,为第二个输入输入a。如何匹配两个输入以查找输出为hello world的hw,您可以使用括号查找一组字符中的一个: #!/bin/bash hw() { echo "hello world" } h0() { echo "hello w0r16" } h3w() { echo "h3ll

如何将输入
hello
world1
与case语句匹配。这样它就能找到匹配的。
例如,如果我为第一个输入输入
1
,为第二个输入输入
a
。如何匹配两个输入以查找输出为
hello world
hw
,您可以使用括号查找一组字符中的一个:

#!/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
交替将应用于整个模式,即
1+A | A
查找
1+A
A
,但不查找
1+A


虽然在本例中,我将分别生成“hello”/“h3ll0”和“world”/“w0r16”。您总共还有四个案例,但在生成字符串时可以节省重复的时间。

1+A | A
表示“
1+A
A
”,而不是“
1+
A
A
)。是否有办法循环脚本?@User10,可能,取决于你在做什么。我的意思是,一旦脚本输出,结果无论如何都可以重做脚本,直到用户输入退出脚本的选项或输入无效的character@User10,将整件事情包装成一个循环,例如,
为true时;读。。。;案例(退出)中断;;以撒;完成
。或者
退出
而不是
中断
。不过,这是一个有点不同的问题。
$ foo=1; bar=B
$ option=$foo+$bar
$ case $option in 1+[bB]) echo 1b;; esac
1b