我有这个命令date -d "-0 month -$(($(date +%d)-1)) days" +%Y%m%d
,我想知道2014年9月1日到2014年9月30日之间的所有日期,返回的结果将是什么。
如何在不改变系统时钟的情况下模拟这个?
答案 0 :(得分:3)
您可以再次使用-d
date
选项。
$ 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'
似乎很多更简单。