bash脚本curl请求中的转义变量

时间:2018-11-08 11:16:34

标签: linux bash shell curl

我正在尝试通过bash脚本进行卷曲,但是无法在curl请求中传递var1的值,并且在执行时出错...

 #!/bin/bash
 var1="some test message"
 curl 'https://link' \
 -H 'Content-Type: application/json' \
 -d '
{"msgtype": "text", 
  "text": {
      "content": $var1
   }
}'

3 个答案:

答案 0 :(得分:0)

您的变量$var1不会被shell扩展,因为它位于单引号'中。

您需要使用双引号让bash进行参数扩展,并转义json数据:

#!/bin/bash
var1="some test message"
curl 'https://link' \
-H 'Content-Type: application/json' \
-d "
{
  \"msgtype\": \"text\", 
  \"text\": {
    \"content\": \"$var1\"
  }
}"

或者您可以使用内联文档(不逃避地狱,但是命令变得笨拙):

#!/bin/bash
var1="some test message"
curl 'https://link' \
-H 'Content-Type: application/json' \
-d "$(cat <<EOT
{
  "msgtype": "text", 
  "text": {
    "content": "$var1"
  }
}
EOT
)"

答案 1 :(得分:0)

使用以下脚本。

https://aaa.com' -H 'Content-Type: application/json' -d '{"msgtype": "text", "text": {      "content": '"'$var1'"'   }}'

答案 2 :(得分:0)

通常,不要像这样使用参数扩展来动态定义JSON。不能保证您的模板与变量的内容一起生成格式正确的JSON。 (出于同样的原因,您没有使用字符串插值来创建动态SQL查询。)请改用jq之类的工具。

curl 'https://link' ... \
  -d "$(jq --argjson x "$var" \
           -n '{msgtype: "text", text: {content: $x}}')"