【发布时间】:2010-12-14 00:20:36
【问题描述】:
OS X (Snow Leopard) 上的日期函数没有 GNU 版本那样的 --date 选项,我无法弄清楚如何在 OS X 上获得以下等效项:
startdate=2010-01-01
enddate=2010-01-31
foldate="$startdate"
until [ "$foldate" == "$enddate" ]
do
# do something with the date here - like pass it as a parameter to a command
foldate=`/bin/date --date "$foldate 1 day" +%Y-%m-%d`
done
解决了 SiegeX 的答案:
startdate=2010-01-01
enddate=2010-01-31
sDateTs=`date -j -f "%Y-%m-%d" $startdate "+%s"`
eDateTs=`date -j -f "%Y-%m-%d" $enddate "+%s"`
dateTs=$sDateTs
offset=86400
while [ "$dateTs" -le "$eDateTs" ]
do
date=`date -j -f "%s" $dateTs "+%Y-%m-%d"`
printf '%s\n' $date
dateTs=$(($dateTs+$offset))
done
【问题讨论】:
-
很高兴看到这对您有用。我不确定
bashOSX 有什么版本(如果它甚至有 bash),但如果有的话,你应该用$()包装你的命令,而不是像sDateTs=$(date -j -f ...)这样的反引号,并使用双括号[[而不是一个[所以你可以做while [[ "$dateTS" < "$eDateTs" ]] -
偏移量的目的是什么?为什么需要它?
-
请注意,在
[中使用=比使用==更安全,因为==的使用不是所有baseline-POSIX shell 都支持的扩展,而=定义为the POSIX standard fortest.