From Bash 初学者指南表 7-1 https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html,我们可以说[ FILE1 -ot FILE2 ]
将产生True if FILE1
比FILE2
, or if FILE2
存在并且FILE1
才不是。在 shell 上执行此命令返回True if FILE1
缺席并且FILE2
存在。但是,当我在 make 脚本中使用它时,它产生了False每当FILE1
缺席并且FILE2
在场。准确地说,我在 make 和 shell 脚本中使用了以下命令:
[ FILE1 -ot FILE2 ] && echo 1 || echo 0
在 shell 上运行此命令会在预期时返回 1。但是,仅当以下情况时,通过 make 运行此命令才会导致 1FILE1
存在并且被发现比FILE2
。在其他情况下,即每当FILE1
没有发现比FILE2
或者每当FILE1
缺席并且FILE2
存在,上面的命令在我的 make 脚本中产生 0。请注意,在我的 make 脚本中,我将上述命令的结果存储在全局变量中。此全局变量稍后将通过条件在其中一个配方中使用。
所以,我想知道这是否是 make 中的错误/功能,还是我这边可能出现的问题(由于某些拼写错误或其他可能的错误来源)?
注意:我在 Ubuntu 18.04.3 上使用 GNU Make 4.1
尝试这个实验(在脚本中):
在我测试的情况下:当 file1 不存在且 file2 确实存在时:
#!/bin/sh
[ file1 -ot file2 ] && echo "file1 older" || echo "file2 older"
产生 file2 旧版本
#!/bin/bash
[ file1 -ot file2 ] && echo "file1 older" || echo "file2 older"
产生 file1 较旧
默认情况下 make 将使用 #!/bin/sh 作为 shell,您可以通过以下方式更改:SHELL = /bin/bash
在你的 makefile 中
我不知道为什么这是不同的 - 它只是 sh 和 bash 之间的不同实现......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)