如何在Curl请求中生成并传递当前时间减1小时的UNIX时间戳
解决方法:将早1小时的UNIX时间戳传入curl请求
这其实是shell命令替换的典型场景——你需要让shell先执行date命令拿到时间戳,再把结果嵌入到curl的JSON参数里。下面给你两种实用的方案:
方案一:直接嵌入命令替换
可以用$()(比反引号可读性更好,更推荐)把date命令包裹起来,通过引号拼接把结果插入到JSON中:
curl -X PUT -H "Content-Type: application/json" -d '{"time":'"$(date -d '1 hour ago' "+%s")"'}' url
这里的引号拼接逻辑很简单:
'{"time":'是单引号包裹的固定字符串部分"$(date ...)"让shell先执行date命令,返回1小时前的UNIX时间戳结果'}'是结尾的固定字符串部分
三者拼接后就会生成{"time":1620000000}这种符合要求的JSON格式。
方案二:先存变量再使用
如果觉得直接嵌入命令有点杂乱,也可以先把时间戳存入变量,再在curl命令里引用变量,可读性更强:
# 第一步:获取1小时前的UNIX时间戳并存入变量 one_hour_ago=$(date -d '1 hour ago' "+%s") # 第二步:用变量发起请求 curl -X PUT -H "Content-Type: application/json" -d '{"time":'"$one_hour_ago"'}' url
为什么你之前的方法不行?
如果直接把date命令写在单引号包裹的JSON里(比如'{"time":date -d ...}'),shell会把整个内容当成纯字符串,不会执行date命令。只有把命令替换放在单引号之外,shell才会先解析执行命令,再把结果代入到最终的请求体中。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

