我有这个命令date -d "-0 month -$(($(date +%d)-1)) days" +%Y%m%d
,我想知道2014-Sep-1和2014-Sep-30之间的所有日子,返回的结果是什么。
如何在不更改系统时钟的情况下模拟它?
您可以再次使用date
的-d
选项。
$ date -d "2014-09-01"
Mon Sep 1 00:00:00 CEST 2014
$ date -d "2014-09-01 + 1 day"
Tue Sep 2 00:00:00 CEST 2014
所以类似的东西
for i in `seq 0 29`
do
today=$(date -d "2014-09-01 + $i days" '+%F')
day=$(date -d "2014-09-01 + $i days" '+%-d')
date -d "$today -0 month -$(($day - 1)) days" '+%Y%m%d'
done
应该做到这一点。请注意,我已将格式说明符更改为%-d
。否则,shell将把前九个值解释为八进制,这将在08和09时失败。
然而,我不太确定你最终想要实现什么。如果您只想打印本月的第一天,
$ date '+%Y%m01'
看起来简单多了。