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

Bash变量引号展开问题:curl调用REST API时参数解析异常

变量展开异常的原因

这是Bash普通字符串变量的展开规则导致的:

  • 存入普通字符串变量的引号属于字面量字符,不会被Bash识别为划分参数边界的语法符号
  • 不带引号引用${CURL_ARGS}时,Bash会默认按IFS(空格、制表符、换行符)对变量内容做单词分割,不会解析其中的引号来合并带空格的参数

你定义的CURL_ARGS变量实际存储内容为 -H "Content-Type: application/json" --data @somefile.json,展开时会被拆分为5个独立参数:-H、"Content-Type:、application/json"、--data、@somefile.json,其中多余的双引号和错误的参数拆分,就是curl无法正常识别请求头的原因。

正确解决方案

使用Bash数组存储动态命令参数,数组的每个元素天然对应一个独立参数,不会被错误拆分:

#!/bin/bash

# 改用数组存储curl动态参数
CURL_ARGS=(-H "Content-Type: application/json" --data @somefile.json)
# 其他变量定义保持不变

set -o xtrace   # 执行前打印命令
# 数组展开必须用 "${数组名[@]}" 格式,保证每个元素作为独立参数传递
curl -k -X "${PROTOCOL}" -u "${CICD_USER}:${CICD_PW}" "${CURL_ARGS[@]}" "${URL}" -v

该写法展开后的命令格式完全符合预期,curl可以正常解析所有参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:54:01