You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash case语句中匹配指定后缀的字符串?

Bash中case语句匹配字符串末尾的问题解决

问题原因

你原来的代码没成功,是因为给模式加了双引号——bash里双引号会把里面的*变成普通字符,不再是通配符。这时候case会去匹配字面量的* unit test字符串,自然和1. unit test对不上。

解决方法

1. 正确使用case语句的模式匹配

去掉模式的双引号,让*发挥通配符的作用,直接匹配任意前缀:

case "1. unit test" in
*" unit test")
  echo 1;;
esac

或者也可以不套引号,直接写:

case "1. unit test" in
* unit test)
  echo 1;;
esac

这里的*会匹配任意长度的前缀(包括空字符串),只要后面跟着 unit test就能匹配成功。

2. 用[[ ]]结合正则匹配

如果需要更灵活的字符串结尾检查,可以用bash的条件判断[[ ]]配合正则表达式的$锚定结尾:

str="1. unit test"
if [[ $str =~ " unit test$" ]]; then
  echo 1
fi

$在正则里表示字符串的末尾,确保匹配的是结尾部分。

3. 用参数扩展判断

利用bash的参数扩展${变量%后缀},这个语法会去掉变量末尾匹配的后缀。如果处理后的变量和原变量不一样,就说明原变量是以该后缀结尾的:

str="1. unit test"
suffix=" unit test"
if [[ "${str%$suffix}" != "$str" ]]; then
  echo 1
fi

内容的提问来源于stack exchange,提问作者iaquobe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:25:40