shell中#和##的区别

Eave 2026.08.27

shell中#和##的区别

将/d/Documents/idea/service/common删除最后一个/及之前的字符,只要common。

project="/d/Documents/idea/service/common"
name=${project##*/}

语法 匹配方式 示例(同上) 结果
${project#*/} 非贪婪(最短匹配,从左边删) 删掉/d/ Documents/idea/service/common
${project##*/} 贪婪(最长匹配,从左边删) 删到最后一个/ common
${project%/*} 非贪婪(从右边删) 删掉/common /d/Documents/idea/service
${project%%/*} 贪婪(从右边删) 只保留第一个/之前 空(因为以/开头)

总之:#删左边,%删右边;单个非贪婪,双个贪婪。