case word in
[(] pattern1 ) compound-list ;;
[[(] pattern[ | pattern] ... ) compound-list ;;] ...
[[(] pattern[ | pattern] ... ) compound-list]
esac和[解决方案
arg=1
if [ "$arg" -lt 5 ]; then
echo 'less than 5'
elif [ "$arg" -lt 15 ]; then
echo 'less than 15'
elif [ "$arg" -eq 17 ] || [ "$arg" -eq 19 ]; then
echo '17 or 19'
else
echo 'neither'
fi
POSIX 7
Bash遵循[https://stackoverflow.com/a/25482040/895245]所述的POSIX
这是引用:[http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_01]部分“案例条件构造”:
有条件的构造情况应执行与多个模式中的第一个相对应的复合列表(请参见模式匹配表示法)。具有相同复合列表的多个模式应以“ |”分隔 符号。 [...]
案例构造的格式如下:
case word in
[(] pattern1 ) compound-list ;;
[[(] pattern[ | pattern] ... ) compound-list ;;] ...
[[(] pattern[ | pattern] ... ) compound-list]
esac
然后[http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13]部分“ 2.13。模式匹配表示法”说:
[如果像XBD RE中那样,在方括号中引入方括号表达式
和扩展的正则表达式指向“ 9.3.5 RE括号表达式”部分,其中指出:
方括号表达式(用方括号括起来的表达式“ []”)是一个RE,它必须与一组特定的单个字符匹配,并且可以基于一组非空的匹配特定的一组多字符排序元素。 列出括号表达式中包含的表达式。
因此,当您执行以下操作时,仅考虑单个字符:
[9-10]