2

我的公司使用 FreeBSD,因此使用了 FreeBSD 的 make 风格。

我们的一些内部端口包括类似这样的内容(其中 BRANCH 是来自 SVN URL 的内容,“主干”或分支名称,如“分支/1.2.3”)。

PORTVERSION=   ${BRANCH:C,^branches/,,}

变量修饰符部分将冒号-c 修饰符make(1)记录为:C

:C/pattern/replacement/[1gW]

我在看正确的文档吗?^branches/对我来说看起来像一个正则表达式模式,但它看起来像实际代码使用,而不是/作为分隔符。我是否跳过了解释这一点的文档?

4

1 回答 1

3

文档说:

:C/pattern/replacement/[1gW]

:C 修饰符与 :S 修饰符类似,只是新旧字符串不是简单的字符串,而是扩展的正则表达式(参见 regex(3))字符串模式和 ed(1) 样式的字符串替换。

并在:S

任何字符都可以用作修饰符字符串部分的分隔符。

正如@MadScientist 指出的那样,使用不同的分隔符是很常见的,尤其是当/它是模式或替换字符串的一部分时,就像你的情况一样。否则它将需要转义,并且看起来${BRANCH:C/^branches\///}似乎不太可读。

于 2021-06-11T22:29:16.167 回答