I need to generate strings with all days in a year
ex:
MIN_DATE=01.01.2012 MAX_DATE=31.12.2012 for date in {1...366..1} do echo ... done for d in {0..365}; do date -d "2012-01-01 + $d days" +'%d.%m.%Y'; done 29.02.2012 is present in the output.days_in_year=date "2012-12-31" +"%j"; for d in in ...for d in {0..365}; do date -d "$year-01-01 + $d days" +'%d.%m.%Y'; done | grep $year. That'll work whether year is 2011 or 2012.date.Not a pure bash solution, but my dateutils can help:
dseq 01.01.2012 31.12.2012 -f %d.%m.%Y -i %d.%m.%Y => 01.01.2012 02.01.2012 ... 31.12.2012 Output format can be configured with -f and input format with -i.
Using an ISO 8601 date format (year-month-day), you can compare dates lexicographically. It's a little messier than I'd like, since bash doesn't have a "<=" operator for strings.
year=2011 d="$year-01-01" last="$(($year+1))-01-01" while [[ $d < $last ]]; do echo $d d=$(date +%F --date "$d + 1 day") done