【发布时间】:2021-06-13 14:48:12
【问题描述】:
我需要在 shell 脚本中进行日期计算。不幸的是,我的操作系统 (SunOS) 没有提供非常方便的日期功能:它不支持 -d 选项,而这正是我所需要的。
在网上漫游以寻找替代解决方案,我发现了一些看起来足够强大的东西,它具有 ksh93 printf 内置函数。它支持这样的语法:
yesterday=${ printf "%(%Y%m%d)T" yesterday; }
friday=${ printf "%(%Y%m%d)T" "3 days ago"; }
在我的情况下,我需要在计算日期前 2 天计算 ,据我了解,它应该这样写(mydate 的格式为“YYYYMMDD”) :
dayinthepast=${ printf "%(%Y%m%d)T" "3 days before $mydate"; }
或
dayinthepast=${ printf "%(%Y%m%d)T" "$mydate - 3 days"; }
但它不起作用。
更令人惊讶的是,第二种语法被识别,但它以减号为加号,并在给定日期的基础上加上 3 天。
我已经阅读了一篇有用的博客,其中介绍了 ksh93 printf 内置语法,但它没有涵盖我的情况。我在这里给出链接(感谢作者):ksh93-date-manipulation
任何帮助将不胜感激。 谢谢
【问题讨论】:
-
$mydate是变量的内容吗?好吧,你无能为力。如果您拥有的工具不支持您想要的,您基本上有两种选择:推出自己的解决方案 - 即用 ksh(或其他语言)编写一个可以满足您需求的库,或安装新工具 - 下载 GNU coreutils 或尝试使用 dateutils 或其他可以满足您需求的库。 -
实际上我怀疑 ksh93 支持我所做的,在最后一个示例中它不会崩溃,它只是以一种奇怪的方式做出反应。这表明几乎支持语法。我想我只是错过了正确的编码方式。