FreeBSD make中:C(冒号C)修饰符含义及分隔符用法疑问
FreeBSD make :C修饰符自定义分隔符问题解答
文档正确性验证
你查阅的make(1)手册中记录的:C修饰符基础语法完全正确,:C/pattern/replacement/[flags]是使用默认斜杠作为分隔符的标准写法。
逗号作为分隔符的合理性
FreeBSD make(又称pmake)的所有带分隔符的变量修饰符(包含:S普通替换、:C正则替换),都支持使用任意非字母数字、非反斜杠、非空白的字符作为分隔符,不需要固定使用斜杠。
该设计是为了避免当匹配模式、替换内容本身包含斜杠时,需要额外添加转义符降低代码可读性。你给出的示例中需要匹配的正则模式^branches/本身带斜杠,用逗号作为分隔符就不需要对模式内的斜杠做转义,以下两种写法逻辑完全等价:
# 用默认斜杠做分隔符,需要转义模式内的/,可读性较差 PORTVERSION= ${BRANCH:C/^branches\///}
# 自定义逗号做分隔符,不需要转义,和你现有代码写法一致 PORTVERSION= ${BRANCH:C,^branches/,,}
文档位置说明
自定义分隔符的说明通常放在make(1)手册「变量修饰符」章节的通用前置说明段落,没有单独放在:C修饰符的条目下,容易被遗漏,不属于你漏看了核心文档。
内容的提问来源于stack exchange,提问作者josaphatv
相关产品推荐
相关产品推荐

