Get Yesterday Date in Bash

Bash

在大多数时候,Mac 系统和 Linux 系统在终端的使用体验上是比较一致的,但偶尔也有一些命令,会出现两端不一样的情况。比如,当需要通过 date 命令获取昨天的日期。

在 Mac 中,可以通过如下的命令来完成:

date -v '-1d' '+%Y-%m-%d'

输出的结果是 2019-08-25。(这里,'+%Y-%m-%d' 指定 date 以“年-月-日”的格式输出日期;另外,如果想要得到明天的日期,可以通过 +1 day+1d 来得到)

然而,在 Linux 系统下,同样的命令无法使用。需要修改成:

date -d '-1 day' '+%Y-%m-%d'

才可以得到同样的结果。这里需要注意一点,如果 Docker 是基于 Alpine 的,默认 date 不支持 -d 这个选项,需要额外安装 coreutils 之后,才可以使用。即,在 Dockerfile 中增加:

RUN apk add --update coreutils && rm -rf /var/cache/apk/*

之后,上面的命令才能正确运行。

如果希望一个命令可以在两个系统中运行,可以用如下的方法进行整合:

[[ $OSTYPE == "darwin"* ]] && \
  date -v '-1d' '+%Y-%m-%d' || \
  date -d '-1 day' '+%Y-%m-%d'

注意,这里需要使用 [[ 进行判断,[ 的比较是无法使用 * 元字符匹配的。当然,这里没有考虑 Windows 的情况,毕竟 Windows 的情况太特殊了,大部分的命令都不兼容。