You need to enable JavaScript to run this app. Bash中比较格式化日期时间字符串报语法错误如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Bash中比较格式化日期时间字符串报语法错误如何解决?

报错原因

Bash 条件表达式中不存在 <= 这个字符串比较运算符,你写的语法不符合Bash的规则,所以触发了语法报错。
你使用的 %Y/%m/%d %H:%M:%S 格式的时间字符串本身是高位到低位顺序排列的,字典序和时间先后顺序完全一致,有两种常用的比较方案:

方案1:转换为Unix时间戳比较(最推荐)

这种方法兼容性最好,不受时间格式影响,纯数字比较逻辑清晰不易出错:

# 生成时间时直接存储时间戳(单位:秒)
dateTimeNowTs=$(date -d 'now' +%s)
tokenExpireDateTs=$(date -d 'now + 25 minutes' +%s)

# 数字小于等于比较用 -le 运算符
if [[ ${tokenExpireDateTs} -le ${dateTimeNowTs} ]]; then
  echo "hi"
fi

如果你已经有现成的 %Y/%m/%d %H:%M:%S 格式字符串,可以临时转换为时间戳再比较:

dateTimeNowTs=$(date -d "${dateTimeNow}" +%s)
tokenExpireDateTs=$(date -d "${tokenExpireDate}" +%s)
方案2:直接字符串比较

不需要转换格式,直接利用该时间格式的字典序特性比较,注意要把<=拆为「小于」加「等于」两个条件组合:

if [[ "${tokenExpireDate}" < "${dateTimeNow}" || "${tokenExpireDate}" == "${dateTimeNow}" ]]; then
  echo "hi"
fi

注意:如果你用单中括号 [ ] 做条件判断,< 和 > 需要加反斜杠转义,写法为 [ "${tokenExpireDate}" \< "${dateTimeNow}" ],更推荐用双中括号 [[ ]] 写法,不需要转义可读性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 22:15:03