如何在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
相关产品推荐
相关产品推荐

