我想阅读两个日期范围之间的所有日期,此范围包括开始日期和结束日期
input_start_date="2013-09-05"
input_end_date="2013-09-10"
START_DATE=$(date -I -d "$input_start_date") || exit -1
END_DATE=$(date -I -d "$input_end_date") || exit -1
d="$START_DATE"
while [ "$d" <= "$END_DATE" ]; do
echo $d
d=$(date -I -d "$d + 1 day")
done
但是当我运行上面的代码时,我得到以下错误
bash: = 2013-09-10: No such file or directory
有人可以帮我解决这个问题
预期输出
2013-09-05
2013-09-06
2013-09-07
2013-09-08
2013-09-09
2013-09-10
答案 0 :(得分:4)
start=2013-09-05
end=2013-09-10
while [[ $start < $end ]]
do
printf "$start\n"; start=$(date -d "$start + 1 day" +"%Y-%m-%d")
done
或者你可以尝试这个
END=$(date -d "2013-09-10" +%s);
DATE=$(date -d "2013-09-05" +%s);
while [[ "$DATE" -le "$END" ]]; do date -d "@$DATE" +%F; let DATE+=86400; done
答案 1 :(得分:3)
这个想法是正确的,但是你的操作符错了,var targetIndex = Array.FindIndex(x => x.gameObject == target);
无法与<=
中的date
字符串一起使用,你需要一个不等式运算符bash
条件。
!=
while [ "$d" != "$enddate" ]; do
运算符在<=
中使用bash
运算符用于算术上下文时有效。
答案 2 :(得分:1)
awk中的一些东西(由于没有测试数据,只是预期的输出,因此改变了范围):
$ awk '$0>="2013-09-06" && $0<="2013-09-09"' file
2013-09-06
2013-09-07
2013-09-08
2013-09-09
答案 3 :(得分:1)
你需要一个do-while循环,bash没有提供。 <怎么样
date="$start_date"
while true; do
echo "$date"
[[ $date = "$end_date" ]] && break
date=$(date -d "$date + 1 day" "+%F")
done
不要使用ALL_CAPS_VAR_NAMES - 太容易错误地覆盖shell /系统变量。