比较bash中的两个日期字符串

时间:2011-12-08 19:59:35

标签: bash date comparison

我在使用脚本检查表的日期以确保从属数据是最新的时遇到问题

问题是日期相等性回归不正确:

NOW=$(date +"%Y-%m-%d")
VALUE=`mysql -uroot -p database -e "select DATE_FORMAT(create_date,'%Y-%m-%d') as '' from actions order by id desc limit 1"`
echo $NOW $VALUE
if [ "$?" -ne 0 ]; then
   MSG="MySQL check data date failed"
   echo $MSG
   echo $MSG > $MESSAGE
   /bin/mail -s "$SUBJECT" "$EMAIL" < $MESSAGE
   exit 7
fi
if [ "$NOW" != "$VALUE" ]; then
   echo "not equal"
fi

输出结果是它们不相等:

2011-12-08 2011-12-08
不等于

我的猜测是我正在比较两种不同的类型,但根据bash文档不应该是这种情况。 谁可以给我解释一下这个? 感谢

1 个答案:

答案 0 :(得分:3)

如果你打开shell调试set -vx,你会看到每一行(或代码块,如while,for循环)显示,(详细模式),然后你得到行执行时所有变量都扩展到当前值。将最后一个条件更改为

if [ "X${NOW}X" != "X${VALUE}X" ] ; then ....

您可以轻松判断$NOW$VALUE是否嵌入了额外的空格字符。一旦您可以看到差异的位置,就可以轻松确定如何修复这些值的分配。

我希望这会有所帮助。