首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BASH -比较日期的字符串输出

BASH -比较日期的字符串输出
EN

Stack Overflow用户
提问于 2018-04-03 21:02:55
回答 1查看 1K关注 0票数 0

我每天都试图使用时间戳来旋转日志文件。存储最后一个日期字符串,然后为我的无限循环(目前每5分钟睡眠一次)生成一个新日期并比较这两个日期。如果它们相等,则为同一天,并写入相同的日志文件。如果值不同,则向新日志文件写入,但在这些新写入之前,前一天将写入tar。我的日期字符串eqaulity条件没有像我预期的那样计算,我在问为什么是:

代码语言:javascript
运行
复制
lastdate=$(date +%Y%m%d)
while true
do
   curdate=$(date +%Y%m%d)

   echo "${lastdate}, ${curdate}"

   if [ "$lastdate" != "$curdate" ]; then
      ## do tar
      lastdate="$curdate"
   fi

   du >> "disk_du_${lastdate}.log"

   sleep 300
done

对于所讨论的部分,我的echo语句显示这两个字符串具有相同的值,但是条件总是运行,即使我正在测试不平等(至少,这就是目的)。我试过不同的条件变体:

代码语言:javascript
运行
复制
if [[ "$lastdate" != "$curdate" ]]; then
if [ $lastdate != $curdate ]; then
if [[ $lastdate != $curdate ]]; then
if [ "${lastdate}" != "${curdate}" ]; then

...but条件总是运行,即使字符串总是显示相同的值。我的基础结构是:http://tldp.org/LDP/abs/html/comparison-ops.html,例7-5,所以我希望有人能告诉我我做错了什么。蒂娅。

EN

回答 1

Stack Overflow用户

发布于 2018-04-03 22:31:28

我建议你检查一下你的鞭子

测试:

GNU,版本4.3.11(1)-release (x86_64-pc-linux-gnu)

--它在工作:

代码语言:javascript
运行
复制
#!/bin/bash
lastdate=$(date +%Y%m%d)
while true
do
   curdate=$(date +%Y%m%d)

   echo "${lastdate}, ${curdate}"

   if [ "$lastdate" != "$curdate" ]; then
      ## do tar
      lastdate="$curdate"
      echo "TRUE"
   else
      echo "FALSE"
   fi
   sleep 5
done

退出:

代码语言:javascript
运行
复制
20180404, 20180404
FALSE
20180404, 20180404
FALSE
20180404, 20180404
FALSE
20180404, 20180404
FALSE
20180404, 20180404
FALSE
20180404, 20180404
FALSE
20180404, 20180404
FALSE
20180404, 20180404
FALSE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49639105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档