我在我的一个项目中使用了这样的case语句来检查一些变量的组合:
fun(){
case "$a:$b:$c" in
*:*:*) echo fine;;
*:2:*) echo ok;;
3:*:*) echo good;;
*) echo not ok;;
esac
}
第一种情况*:*:*)
的目标是检查其中一个变量,假设$c
不是空。但它不是这样工作的,它基本上和*)
在末尾相同,如果$c
未设置,则触发误报。我试过使用*:*:+
和*:*:!''
没有运气。所以我最后用了这个:
fun(){
c1=; [[ $c ]] && c1=1
case "$a:$b:$c1" in
*:*:1) echo fine;;
*:2:*) echo ok;;
3:*:*) echo good;;
*) echo not ok;;
esac
}
问题是-有没有更好的,更“情况”的方式?
1条答案
按热度按时间pgpifvop1#
您可以简单地使用
?
glob,它只匹配一个字符。与?*
组合时,它至少匹配一个字符。我认为你应该改变选项的顺序,因为例如。
3:2:1
将是好的,并且没有三元组将是好的或好的。