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

时间:2015-01-12 20:52:11

标签: linux shell date unix

我正在尝试这个简单的脚本,但不知怎的,我每次都会额外获得2天的时间:

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

2015年1月12日我剩下355天,而应该是353。

日期和一切都很好。

1 个答案:

答案 0 :(得分:5)

输出的日期编号为前导零:

$ 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)