フォーマットの確認とかするループ処理を書いた。そのスニペットを残した。
BSD版の date コマンドでも似た動きをするように書き換えました
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
loop_date() {
__internal_format='%Y-%m-%d %H:%M:%S'
if [ "$(uname)" = "Darwin" ]; then
load_cmd='date -j -f %Y-%m-%d '
instep_cmd() {
date -v "$2" -j -f "$__internal_format" "$1" "+$3"
}
default_step=+1d
else
load_cmd='date -d '
instep_cmd() {
date -d "$1 $2" "+$3"
}
default_step=1day
fi
start=$1
end=$2
format=${3:-%Y-%m-%d}
step=${4:-"$default_step"}
idx="$($load_cmd "$start" "+$format")"
__idx="$($load_cmd "$start" "+$__internal_format")"
if [ "$?" != "0" ];
then
echo "invalid format(\$start:$start)" >&2
return 1
fi
__end="$($load_cmd "$end" "+$__internal_format")"
if [ "$?" != "0" ];
then
echo "invalid format(\$end:$end)" >&2
return 1
fi
while [ 1 ] ; do
echo $idx
if [ "$__idx" = "$__end" ] ; then
break
fi
idx="$(instep_cmd "$__idx" "$step" "$format")"
__idx="$(instep_cmd "$__idx" "$step" "$__internal_format")"
done
}
|