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

标签 linux shell date unix

我正在尝试这个简单的脚本,但不知何故我每次都多了 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)

关于linux - 试图在 Shell 脚本 $(date +%j) 中找到确切的剩余天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27910551/

相关文章:

git - 什么环境变量设置 Git Color.UI?

php - 根据值添加数组项并删除 php 中的重复值

php - 如何将 2010-03-01 转换为 Unixtime (使用 php)

php - gdb 显示奇怪的无符号线程导致 SIGSEGV - 它是什么?

Java删除文件/目录相当于linux "rm -rf/tmp/garbagedir*"

bash - xargs 命令在 'LINE_MAX' 断言上失败

linux - 如何使用shell实时连续处理tail -f换行?

c++ - 调用 std::thread.detach 时的意外行为

linux - 在我的 shell 脚本中,如何在插入充电器时停止播放声音?

date - 如何计算结束日期