使用makefile时如何在变量中转义特殊字符?

时间:2014-12-11 02:26:17

标签: makefile gnu-make

假设我有一个带show方法的makefile

show::
echo $(VAR)

按预期执行foobar时会输出make VAR=foobar show

但是,当VAR是一些散列字符串,例如$2y$10$Gae9mVS时,一切都会出错。

make VAR=$2y$10$Gae9mVS show显示y0,但不显示$2y$10$Gae9mVS

有人可以给我一些提示吗?感谢。

2 个答案:

答案 0 :(得分:0)

它将完全按照你的方式完成

$ VAR=$2y$10$Gae9mVS && echo $VAR
y0

这发生在shell级别;单引号字符串。

$ VAR='$2y$10$Gae9mVS' && echo $VAR
$2y$10$Gae9mVS

答案 1 :(得分:0)

这里有两个(实例)问题。他们都没有与make有任何关系。

尝试echo VAR=$2y$10$Gae9mVS,看看你得到了什么。

现在尝试echo 'VAR=$2y$10$Gae9mVS'

然后尝试make 'VAR=$2y$10$Gae9mVS' show

然后在echo '$(VAR)'行添加单引号,再次尝试make 'VAR=$2y$10$Gae9mVS' show

简而言之:

引用您的变量。

正如评论中所指出的,这里还有一个问题,这个问题实际上与make有关。

当你要求make展开$(VAR)时,它会递归地扩展变量,并将值中的$视为要扩展的变量。

您可以使用echo '$(value VAR)'来避免这种情况,或使用make 'VAR=$$2y$$10$$Gae9mVS' show从make $中逃脱。{/ p>

不幸的是,我不确定你能以透明的方式做到这一点。这就要求你知道如何使用变量(虽然make中使用的任何一个都会有这个扩展问题),或者知道你的变量不需要在使用站点递归扩展。