Bash脚本日期递增异常:未增日期却逐小时递减问题排查
问题分析与解决
错误原因
- 输出格式颠倒:你在
date命令的输出格式中使用了%Y-%d-%m,这是「年-日-月」的顺序,但输入时间戳是标准的「年-月-日」格式,导致计算后的日期被错误显示(比如6月4日会被输出为4月6日)。 - 增量参数解析异常:部分
date版本对+$i day的单数写法支持不佳,或者需要在+与数字间添加空格,导致实际未正确添加天数,反而因解析错误出现小时递减的问题。
修正后的脚本
#!/bin/bash TIME_STAMP="2023-06-03 06:21:33" for i in {1..5} do NEXT_DATE=$(date "+%Y-%m-%d %H:%M:%S" -d "$TIME_STAMP + $i days") echo "$NEXT_DATE" done
正确输出
2023-06-04 06:21:33 2023-06-05 06:21:33 2023-06-06 06:21:33 2023-06-07 06:21:33 2023-06-08 06:21:33
更简洁的实现
如果使用GNU date(Linux默认),可以直接循环生成后续日期,无需手动维护计数器:
#!/bin/bash START="2023-06-03 06:21:33" for i in {0..4}; do date -d "$START + $i days" +"%Y-%m-%d %H:%M:%S" done
跨平台兼容写法(适用于macOS/BSD)
如果是BSD系的date(比如macOS),语法有差异,需使用-v参数调整日期:
#!/bin/bash TIME_STAMP="2023-06-03 06:21:33" for i in {1..5} do NEXT_DATE=$(date -j -v "+${i}d" -f "%Y-%m-%d %H:%M:%S" "$TIME_STAMP" +"%Y-%m-%d %H:%M:%S") echo "$NEXT_DATE" done
内容的提问来源于stack exchange,提问作者S tommo
相关产品推荐
相关产品推荐

