日期“1 个月前”在 AIX 中不起作用

日期“1 个月前”在 AIX 中不起作用

在机器 A(运行 Oracle Linux Server 版本 6.4)中,我可以使用以下命令智能获取 1 个月前的日期:

$(date -d"1 month ago" '+%Y0%m')

但它在机器 B(AIX) 上不起作用,是否有其他方法可以实现此目的?两者都在.sh文件中并运行:

sh Test.sh

机器B中显示错误:

date: illegal option -- d
Usage: date [-u] [+Field Descriptors]

答案1

它与 shell 无关,而是与date命令有关。该-d选项特定于该date命令的 GNU 实现。在非 GNU 系统上,除非您将 GNU 版本安装date为单独的软件包(可能会安装为gdate或作为/opt/gnu/bin/date...),否则这将不起作用。

请注意,最新版本的 ksh93 的内置命令具有类似的功能printf

printf '%(%Y%m)T\n' '1 month ago'

(另请参阅zsh另一个具有内置日期操作支持的 shell(模块strftime中内置zsh/datetime))。

其他一些date实现也具有调整日期的功能。例如,使用 BSD date,您可以执行以下操作:

date -v -1m +%Y%m

我不知道 AIX 附带了执行日期计算的命令,并且 POSIX 工具箱中没有命令,因此没有标准/可移植命令。您可以恢复perl或手动计算:

eval "$(date +'y=%Y m=%m')"
m=$((${m#0} - 1))
[ "$m" -gt 0 ] || m=12 y=$((y - 1)) # January case
printf '%d%02d\n' "$y" "$m"

答案2

date -d...在 AIX/ksh 中不起作用,因此请使用下面的一个,它在 AIX 上完美运行:

TZ=aaa$(expr $(expr `TZ=aaa24 date +%d` + 1) \* 24) date +%m

相关内容