如何在curl命令中使用date日期变量实现GET请求动态传参
你之前写法的核心问题
- 单引号包裹的字符串在Shell中属于强引用,不会解析内部的
$()命令替换、变量取值逻辑,第一种写法把date命令放在单引号内,命令不会执行,只会被当作普通字符串传给接口。 - 日期格式化符写错:你用的
%Y-%d-%m是「年-日-月」格式,和示例要求的「年-月-日」不符,应该调整为%Y-%m-%d。 - 多余的符号拼接:第三种写法额外拼接了引号到参数值里,相当于传给接口的参数值是带双引号的,不符合接口要求;第二种写法末尾多了冗余的单引号,存在语法错误。
正确可用写法
写法1:直接拼接命令替换
用双引号包裹整个URL,Shell会自动解析内部的命令替换逻辑:
curl -s -XGET "https://www.website.com/api/shifts?start_date=$(date +'%Y-%m-%d')"
写法2:先存变量再调用
逻辑更清晰,适合多参数场景:
# 先赋值日期变量 CURRENT_DATE=$(date +'%Y-%m-%d') # 调用curl接口 curl -s -XGET "https://www.website.com/api/shifts?start_date=${CURRENT_DATE}"
写法3:兼容特殊参数的稳妥写法
如果后续参数有空格、特殊字符的场景也能正常使用,用-G参数指定把--data-urlencode的内容拼到GET请求的URL参数里,自动完成编码:
curl -s -XGET -G 'https://www.website.com/api/shifts' --data-urlencode "start_date=$(date +'%Y-%m-%d')"
内容的提问来源于stack exchange,提问作者amy
相关产品推荐
相关产品推荐

