Shell脚本中如何去除变量双引号解决curl API认证失败问题
Shell脚本curl调用API时token被额外添加双引号的解决方法
你之前尝试的两种curl传参写法本身语法没有问题,set -x调试输出中显示的双引号如果是真的被传入请求,根本原因是$login_token变量本身就存储了多余的双引号,而非shell传参时自动添加的。调试输出里的双引号部分是shell为了标识参数边界的显示标记,不会实际传给命令,只有变量本身携带的引号才会被代入请求。
1. 排查变量是否自带多余引号
执行以下代码确认变量的原始值:
login_token="eUsadjb@dsi-0nknhsnc" # 直接打印变量,肉眼看是否首尾有双引号 echo "token值:$login_token" # 打印字符编码确认,正常不会出现双引号对应的ASCII码22 echo -n "$login_token" | od -c
2. 清理变量中的多余引号
如果确认变量首尾携带多余双引号,用shell参数扩展直接移除:
# 移除变量中所有双引号 login_token="${login_token//\"/}"
3. 构造正确的curl请求
清理变量后直接用双引号包裹整个请求头即可:
set -x login_token="eUsadjb@dsi-0nknhsnc" # 先清理多余引号 login_token="${login_token//\"/}" API_Response=$(curl -X POST \ --header 'Accept: application/json' \ --header "Authorization: Bearer $login_token" \ 'https://example.com') set +x
兼容方案:用数组存储curl参数(避免特殊解析场景问题)
如果你的shell环境存在特殊的参数解析规则,可以用数组存储所有curl参数,彻底避免引号拼接异常:
login_token="eUsadjb@dsi-0nknhsnc" login_token="${login_token//\"/}" curl_params=( -X POST --header 'Accept: application/json' --header "Authorization: Bearer $login_token" 'https://example.com' ) API_Response=$(curl "${curl_params[@]}")
内容的提问来源于stack exchange,提问作者Testers Logic
相关产品推荐
相关产品推荐

