Há o dateseq
(às vezes chamado dseq
ou dateutils.dseq
) de dateutils
para isso:
dateseq -{i,f}%Y%m%d 20170301 20170831
Dos três shells que suportam essa sintaxe for ((...))
( ksh93
(de onde vem), zsh
e bash
) dois têm suporte interno para isso, embora de maneiras diferentes:
ksh93
for ((i = 20170301; i<=20170831; i=$(TZ=UTC0 printf '%(%Y%m%d)T' "$i 24:00")))
do
echo "$i"
done
zsh
zmodload zsh/datetime
for ((i = 20170301; i<=20170831;)); do
echo "$i"
TZ=UTC0 strftime -rs s %Y%m%d $i
TZ=UTC0 strftime -s i %Y%m%d $((s + 86400))
done
bash
O printf
do shell GNU também suporta ksh93
-like %T
, mas apenas para formatação, não para datas de análise. No entanto, onde bash
está disponível, o GNU date
está frequentemente disponível e várias respostas foram dadas para isso.
Outras implementações de date
como o busybox ou o BSD também têm a capacidade, mas com uma sintaxe diferente.
Outras alternativas incluem o GNU awk
ou perl
.