You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中比较当前日期与指定日期是否大于等于

正确在Bash中比较日期(判断当前日期是否大于等于指定日期)

你遇到的错误根源在于:-ge是数值比较运算符,Bash会尝试把2023-09-18这类带连字符的字符串拆解为数值处理,其中09被识别为八进制数(八进制系统中没有数字9),因此触发"value too great for base"错误。即便没有八进制的问题,数值比较也无法正确处理日期逻辑。

以下是两种可靠的解决方案:

方案1:利用YYYY-MM-DD格式的字符串特性直接比较

由于YYYY-MM-DD格式的字符串,其字典序与时间先后顺序完全一致(例如2023-09-17 < 2023-09-18 < 2023-09-19),因此可以直接用字符串比较运算符>=(仅在双括号[[ ]]中支持):

if [[ "$(date +%Y-%m-%d)" >= "2023-09-18" ]]
then
    echo "today is equal or greater than 2023-09-18."
else
    echo "today is before 2023-09-18."
fi

这个方法简单高效,前提是确保两边的日期都严格遵循YYYY-MM-DD格式。

方案2:转换为Unix时间戳进行数值比较

如果需要处理非标准格式的日期,或者想更严谨地进行时间比较,可以将日期转换为Unix时间戳(从1970年1月1日00:00:00 UTC到该日期的秒数),再用数值运算符-ge比较:

# 获取当前时间的时间戳
current_timestamp=$(date +%s)
# 将指定日期转换为时间戳
target_timestamp=$(date -d "2023-09-18" +%s)

if [[ $current_timestamp -ge $target_timestamp ]]
then
    echo "today is equal or greater than 2023-09-18."
else
    echo "today is before 2023-09-18."
fi

这种方法兼容性更强,date -d支持解析大多数常见的日期格式(如2023/09/18、Sep 18 2023等)。

内容的提问来源于stack exchange,提问作者Saeed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:17:51