che*_*ner 14
只要日期为YYYY-MM-DD格式,您就可以按字典顺序对它们进行比较,然后让date日历运算不先转换为秒:
startdate=2013-03-15
enddate=2013-04-14
curr="$startdate"
while true; do
echo "$curr"
[ "$curr" \< "$enddate" ] || break
curr=$( date +%Y-%m-%d --date "$curr +1 day" )
done
Run Code Online (Sandbox Code Playgroud)
使用[ ... ],您需要转义<以避免与输入重定向运算符混淆.
如果开始日期大于结束日期,则确实会打印开始日期.
小智 7
如果您想要"最近"日期,则可以选择:
echo {100..1} | xargs -I{} -d ' ' date --date={}' days ago' +"%Y-%m-%d"
Run Code Online (Sandbox Code Playgroud)
显然不适用于任意日期范围.
另一种选择是dateseq从dateutils(http://www.fresse.org/dateutils/#dateseq)使用:
$ dateseq 2013-03-01 2013-03-25
2013-03-01
2013-03-02
2013-03-03
2013-03-04
2013-03-05
2013-03-06
2013-03-07
2013-03-08
2013-03-09
2013-03-10
2013-03-11
2013-03-12
2013-03-13
2013-03-14
2013-03-15
2013-03-16
2013-03-17
2013-03-18
2013-03-19
2013-03-20
2013-03-21
2013-03-22
2013-03-23
2013-03-24
2013-03-25
Run Code Online (Sandbox Code Playgroud)
小智 3
用于date将日期转换为秒,做一些数学计算并转换回来:
#/bin/bash
dstart=2013-03-01
dend=2013-03-25
# convert in seconds sinch the epoch:
start=$(date -d$dstart +%s)
end=$(date -d$dend +%s)
cur=$start
while [ $cur -le $end ]; do
# convert seconds to date:
date -d@$cur +%Y-%m-%d
let cur+=24*60*60
done
Run Code Online (Sandbox Code Playgroud)
man date有关日期参数的更多信息,请参阅。