Shell如何裁剪不同前缀的仓库名提取domain字段?
可行实现方案
方案1:Bash原生参数扩展(推荐)
无需调用任何外部命令,性能最优,兼容性好,写法最简单:
# 按优先级依次匹配删除两种前缀,两种场景自动适配 domain="${repo#app-na-}" domain="${domain#wcm-}"
逻辑说明:
${变量#前缀}是Bash内置的参数扩展语法,作用是从变量内容开头删除最短匹配的前缀- 如果仓库名是
app-na-开头,第一行就会把前缀删除,第二行没有匹配到wcm-前缀,内容保持不变 - 如果仓库名是
wcm-开头,第一行没有匹配到app-na-前缀,内容保持不变,第二行删除wcm-前缀,得到目标结果
方案2:sed正则替换(兼容POSIX sh环境)
如果需要兼容非Bash的shell环境,可以用sed一步完成匹配替换:
domain=$(echo "$repo" | sed -E 's/^(app-na-|wcm-)//')
逻辑说明:
-E开启扩展正则支持^(app-na-|wcm-)匹配字符串开头的两种前缀任意一种- 把匹配到的前缀替换为空,直接得到裁剪后的内容
方案3:if分支判断写法(对应你之前尝试的修正版)
如果要走分支判断逻辑,可以用字符串前缀匹配实现:
if [[ $repo == app-na-* ]]; then # 下标从0开始计数,前7个字符为app-na-,从第7位开始截取 domain="${repo:7}" elif [[ $repo == wcm-* ]]; then # 前4个字符为wcm-,从第4位开始截取 domain="${repo:4}" fi
内容的提问来源于stack exchange,提问作者Devops-Learner
相关产品推荐
相关产品推荐

