将变量(包含空格)传递给curl --data字段

时间:2019-05-18 17:41:54

标签: json bash

包含空格的参数将无法正确传递给curl命令。 在--data字段中引号未正确传递。

如果我只是回显在curl命令中使用的变量'curlData',我将获得应有的一切;例如:

$echo $curlData
'{"name":"jason","description","service"}'

我不明白为什么curl不会像预期的那样消耗'curlData'变量:

curl --data '{"name":"jason","description","service"}'

这是我的代码示例:

read -p "Name : " repoName
read -p "Description []: " repoDescription

curlData="'"{'"'name'"':'"'$repoName'"','"'descripton'"':'"'$repoDescription'"'}"'"

curl --data $curlData $apiURL 

错误:

curl: (3) [globbing] unmatched close brace/bracket in column 26

谢谢您的帮助,我觉得我现在正在接受报价。

2 个答案:

答案 0 :(得分:2)

  1. 引用所有变量展开,
  2. 要确保curlData是带有正确转义的特殊字符等的有效JSON值,请使用来生成它。
curlData="$(jq --arg name "$repoName" --arg desc "$repoDescription" -nc '{name:$name,description:$desc}')"
curl --data "$curlData" "$apiURL"

答案 1 :(得分:0)

如果您有权使用任何形式的软件包管理,我强烈建议jo

curlData=$(jo name="$repoName" description="$repoDescription")
curl -d "$curlData" "$apiURL"