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

Bash中${var#pattern}前缀模式匹配未生效原因解答

现象原因

Bash 中 ${var#pattern} 属于前缀删除操作,匹配规则强制从变量值的最起始位置开始校验模式,不会在字符串中间检索匹配项,这是两次执行都返回完整字符串的核心原因。
示例中变量值为 this is a test,字符串起始位置的字符序列是 this,既不匹配模式t?st,也不匹配模式test;模式匹配失败时Bash会直接返回原始变量值,不做任何删除处理。

各类字符串删除操作符的匹配规则

  • # / ##:仅从字符串开头锚定匹配,分别删除最短、最长的匹配前缀
  • % / %%:仅从字符串末尾锚定匹配,分别删除最短、最长的匹配后缀
    如果需要删除字符串任意位置的匹配片段,前缀/后缀删除操作符无法实现,需要使用字符串替换语法。

对应场景的正确写法示例

  1. 前缀删除的正常效果:
var="this is a test"; echo ${var#this}
# 输出: is a test

模式从字符串开头刚好匹配到this,匹配部分被删除,返回剩余内容。

  1. 实现预期效果(删除末尾的 test,得到this is a),需要使用后缀删除操作符:
var="this is a test"; echo ${var% test}
# 输出:this is a
  1. 删除字符串任意位置的匹配片段,使用替换语法将匹配内容替换为空即可:
var="this is a test"; echo ${var/test/}
# 输出:this is a 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:36:26