Bash脚本curl命令变量替换后Bearer授权异常如何解决?
问题根因
你手动添加的转义单引号\'在Bash变量展开阶段不会被识别为参数边界标记,反而会作为实际值的一部分被传递给curl,最终请求头里的Authorization字段被额外包裹了一层不必要的单引号,服务端无法正确解析Bearer令牌,因此返回错误。
你可以在脚本开头添加set -x执行验证,会看到实际传给curl的Header参数带有多余的单引号。
修正方案
方案1:直接简化写法(快速修复)
不要将curl命令前缀存入变量,直接调用时用双引号包裹Header变量即可,避免额外转义:
OPTS_HOST='https://example.com/api' OPTS_USER='Authorization:Bearer sdfsdfsfd/1Fdsdfsdfdf' OPTS_CURL="--silent" curl $OPTS_CURL -H "$OPTS_USER" "$OPTS_HOST"
方案2:数组存储参数(更规范,避免参数含空格时的拆分问题)
如果需要复用curl参数,更稳妥的做法是用Bash数组存储所有参数,彻底避免参数拆分错误:
OPTS_HOST='https://example.com/api' # 数组存储所有curl参数 CURL_ARGS=( --silent -H "Authorization:Bearer sdfsdfsfd/1Fdsdfsdfdf" ) # 展开数组执行命令 curl "${CURL_ARGS[@]}" "$OPTS_HOST"
内容的提问来源于stack exchange,提问作者pa1
相关产品推荐
相关产品推荐

