Bash条件语句在Cygwin下不起作用

时间:2011-07-09 06:56:37

标签: bash makefile conditional md5

我有一个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,我发现哈希看起来相同,但是它总是会更新哈希文件。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

echo "'$$CURR' '$$PREV'"并检查空格。我的猜测是,当使用单引号时你会发现不同(周围的双引号是插值变量所必需的。)

如果是这种情况,解决问题的一种方法是确保PREV始终包含某些内容,例如else echo X,然后删除双引号:if [ $$CURR != $$PREV ];