regex bash case变量不为空

relj7zay  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(71)

我在我的一个项目中使用了这样的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
}

问题是-有没有更好的,更“情况”的方式?

pgpifvop

pgpifvop1#

您可以简单地使用? glob,它只匹配一个字符。与?*组合时,它至少匹配一个字符。

case "$a:$b:$c" in
     (*:*:?*) echo fine;;
     (*:2:?*) echo ok;;
     (3:*:?*) echo good;;
          (*) echo not ok;;
esac

我认为你应该改变选项的顺序,因为例如。3:2:1将是好的,并且没有三元组将是好的或好的。

相关问题