You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本按分区数计算时间片时date增量表达式语法错误求助

问题原因
  • 循环范围错误:你用了seq 0 $partitions,当partitions=3时会输出0/1/2/3四个值,循环执行4次,和你需要的N=partitions次不符。
  • date命令的-d参数不支持直接解析算术表达式:你直接把${i}*24/$partitions这类表达式塞到-d的参数里,date无法识别运算逻辑,直接抛出语法错误。
  • (可选)整数运算会有精度损失:如果partitions不能整除24,Bash自带的整数算术会截断小数部分,导致切片偏移计算不准。
解决方案

先单独计算每个切片的前后偏移小时数,再传入date命令,同时修正循环范围即可。如果需要兼容非整数的偏移量,可以用bc做浮点运算。

修正后的完整代码如下:

#!/bin/bash

date=20210825
partitions=3

# 循环次数等于partitions,i从0到partitions-1
for i in $(seq 0 $((partitions - 1))); do
    # 先计算偏移小时数,scale=2保留两位小数兼容非整数切片
    start_offset=$(echo "scale=2; $i * 24 / $partitions" | bc)
    stop_offset=$(echo "scale=2; ($i + 1) * 24 / $partitions" | bc)
    
    # 传入偏移量到date命令
    start_time=$(date -d "${date} + ${start_offset} hour" +%H)"000"
    stop_time=$(date -d "${date} + ${stop_offset} hour" +%H)"000"

    # 可选:如果结束时间是00点,替换为24,符合单日切片的认知
    if [ "$stop_time" = "00000" ]; then
        stop_time="24000"
    fi

    echo "切片$((i+1)): $start_time - $stop_time"
done

运行后的输出结果(partitions=3时):

切片1: 00000 - 08000
切片2: 08000 - 16000
切片3: 16000 - 24000

完全符合你要的N对起止时间的需求。

内容的提问来源于stack exchange,提问作者bullfighter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:36:02