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

Bash脚本中date +%j运算报错:value too great for base问题求助

Bash日期计算报错解决:"value too great for base"

错误原因

你用date +%j获取的是一年中的第几天,返回结果是带前导零的三位数(比如089)。Bash的算术扩展$((...))会把开头带0的数字默认解析为八进制数,但八进制里只有0-7这几个数字,所以包含8或9的数值就会触发"value too great for base"错误。

解决方案

方法1:强制按十进制解析数字

在算术计算时,用10#前缀指定数字为十进制,不管有没有前导零都能正确计算:

today=$(date +%j)
# run every monday
echo "$today"
limit="$((10#$today - 30))"
echo "$limit"

方法2:让date直接计算N天前的日期(更健壮)

如果你的核心需求是获取30天前的日期,没必要自己计算天数差,直接用date命令的日期偏移功能,还能自动处理跨年、月份天数不同的情况:

# 获取30天前的一年中的第几天(不带前导零)
limit_day=$(date -d "30 days ago" +%j)
echo "$limit_day"

如果需要进一步计算,同样可以用10#确保十进制解析:

limit="$((10#$limit_day))"

额外建议:直接用find筛选文件

如果最终是要查找30天内的文件,直接用find命令更高效,不用手动处理日期计算:

# 查找当前目录及子目录下,30天内修改过的文件
find . -type f -mtime -30

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:24:53