假设我有一个带show方法的makefile
show::
echo $(VAR)
按预期执行foobar
时会输出make VAR=foobar show
。
但是,当VAR是一些散列字符串,例如$2y$10$Gae9mVS
时,一切都会出错。
make VAR=$2y$10$Gae9mVS show
显示y0,但不显示$2y$10$Gae9mVS
有人可以给我一些提示吗?感谢。
答案 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中使用的任何一个都会有这个扩展问题),或者知道你的变量不需要在使用站点递归扩展。