试图在 Shell 脚本 $(date +%j) 中找到确切的剩余天数

Trying to find the exact remaining days in Shell Script $(date +%j)

我正在尝试这个简单的脚本,但不知何故我每次都多了 2 天:

#!/bin/bash
date=$(date +%j)
remaining="$(( 365 - $date))"
echo $remaining

2015 年 1 月 12 日我还有 355 天,而它应该是 353 天。

日期和一切都很好。

天数输出前导零:

$ date +%j
012

这意味着该数字将被解释为八进制数,八进制数 012 等于十进制数 10(这就是它相差 2 的原因)。您可以手动指定基数以覆盖默认解释:

date=$(date +%j)
remaining="$(( 365 - 10#$date))"
echo "$remaining"

1 月 12 日今天给出 353。

附带说明一下,如果你想获取当年的总天数而不是硬编码 365,你可以使用:

days_this_year=$(date -d "$(date +%Y)/12/31" +%j)