Answers:
正如已经正确指出的那样,没有区别,但是请注意不要混合使用两种定界符,因为它可能导致诸如unomadh GNU make example之类的神秘错误。
从GNU make函数调用语法手册(重点为我):
[…]如果参数本身包含其他函数调用或变量引用,则对所有引用使用相同类型的分隔符是最明智的;写
$(subst a,b,$(x))
,不行$(subst a,b,${x})
。这是因为它更清晰,并且因为仅匹配一种定界符才能找到reference的末尾。
实际上,这似乎是完全不同的:
, = ,
list = a,b,c
$(info $(subst $(,),-,$(list))_EOL)
$(info $(subst ${,},-,$(list))_EOL)
输出
a-b-c_EOL
md/init-profile.md:4: *** unterminated variable reference. Stop.
但是到目前为止,我仅在$ {...}中的变量名称本身包含逗号时才发现这种差异。我最初以为$ {...}并不是将逗号扩展为值的一部分,但是事实证明我无法以这种方式破解它。我仍然不明白这一点...如果有人提出解释,我很高兴知道!
$()
make来避免在make和shell变量之间引起混淆(超过已经存在的混淆)。GNU提供有关变量引用的文档。