BSD make有一个:Q
变量扩展修饰符,记录在 FreeBSD make man page 如下:
:Q引用变量中的每个shell元字符,所以它可以是
通过递归调用make安全传递。



 如果变量 var
的值为 ab \ c“ d'e $ f
,然后 $(var:Q)
扩展为 a \ b \\ c \“d \'e \ $ f
(或等价的东西)。这对于将字符串传递给shell非常有用,而不必担心shell会解释任何特殊字符。
GNU make是否具有等效字符?或者我是否必须逃避我自己的特殊角色?

答案 0 :(得分:1)
GNU make提供了可以帮助解决问题的函数subst
和patsubst
。这些是通用,但开发人员需要更多工作,因为他们无法解决特定的问题。此外,文档没有显示他们使用正则表达式,添加到工作中。
例如,您原则上可以构建一个这样的表达式:
$(subst \\,\\\\,$(subst ",\", $(subst ',\', var)))
有关更多讨论,
答案 1 :(得分:1)
对于 sh 变体,只需将表达式用单引号括起来,将任何嵌入的单引号更改为'"'"'
。
quote = '$(subst ','"'"',$1)'
用法:
$(error [$(call quote,ab'c\ d$$f)])
脚注:没有办法在单引号内引用任何内容。因此,第二个单引号将关闭引用的表达式。因此,要处理嵌入式单引号,请使用'
关闭单引号,添加带引号的单引号"'"
,启动另一个单引号字符串'
。