问题描述
#!/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
我如何将输入 hello
和 world1
与 case 语句匹配。所以它可以找到匹配。
例如,如果我为第一个输入输入 1
,为第二个输入输入 a
。我如何匹配两个输入以找到输出为 hw
的 hello world
。
解决方法
您可以使用方括号查找一组字符中的一个:
$ foo=1; bar=B
$ option=$foo+$bar
$ case $option in 1+[bB]) echo 1b;; esac
1b
交替将应用于整个模式,即 1+A|a
查找 1+A
或 a
但不查找 1+a
。
尽管在这种情况下,我会分别生成“hello”/“h3ll0”和“world”/“w0r16”。您仍然总共有四个案例,但可以在生成字符串时节省重复。