我有一个Makefile规则,它为一个文件生成一个MD5哈希值,将它与前一次运行的存储哈希值进行比较,如果不同,则更新存储的哈希值。 (我有一些从数据库生成的文件,因此它们的时间戳总是新的,没有MD5哈希我不知道它们是否真的改变了。)这里是:
CURR=`$(MD5) -q $<`; \
PREV=`if [ -e $@ ] ; then cat $@ ; fi` ; \
if [ "$$CURR" != "$$PREV" ]; then echo $$CURR > $@ ; fi
(此处$(MD5)
是md5
工具,Mac上为md5
,Cygwin为md5deep
。
出于某种原因,这在Mac OS X下的bash
中工作正常,但在Cygwin下无效。即它执行,但条件总是计算为true,所以它总是更新哈希。我添加了echo $$CURR $$PREV
,我发现哈希看起来相同,但是它总是会更新哈希文件。
我错过了什么?
答案 0 :(得分:2)
echo "'$$CURR' '$$PREV'"
并检查空格。我的猜测是,当使用单引号时你会发现不同(周围的双引号是插值变量所必需的。)
如果是这种情况,解决问题的一种方法是确保PREV始终包含某些内容,例如else echo X
,然后删除双引号:if [ $$CURR != $$PREV ];