Bash中如何正确比较当前日期与指定未来日期的大小
错误原因
- 变量定义错误:你定义
curr_date时等号两侧加了空格,shell会将其识别为命令而非变量赋值,直接报错。 - 变量名引用错误:你存储当前日期字符串的变量是
curr_date,但转换时间戳时写的是不存在的$dat,自然无法获取正确值。 - 未给含空格的变量加双引号:日期字符串中包含空格,不加双引号的情况下shell会将其拆分为多个独立参数传递给
date命令,导致参数解析失败。
方式1:按照你的现有逻辑修改(先存日期字符串再转时间戳
先修正curr_date的定义,再正确定义now变量:
# 修正变量定义,等号两侧不能有空格 curr_date=$(date '+%F %H:%M:%S') # 给变量加双引号传递给date命令 now=$(date -d "$curr_date" +%s)
方式2:更简化的写法(无需中转日期字符串)
如果你的目的只是获取当前时间的时间戳做对比,不需要先转成日期字符串再转回来,直接一步获取即可:
now=$(date +%s)
补充:if判断的优化建议
后续的判断逻辑建议给变量加上双引号,避免变量为空时出现语法错误:
if [ "$now" -ge "$todate" ]; then # 你的逻辑代码 fi
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

