使用bash脚本将变量传递到CURL命令中(变量值中带双引号)

时间:2018-11-08 20:43:07

标签: bash variables curl

我在创建然后使用包含值中包含双引号的变量时遇到了麻烦,并且确实很难找到其他带有此类示例的帖子,其中一些具有特殊字符,但没有专门考虑使用双引号。

我希望在bash脚本中创建一个变量,该变量将允许我以“文本”值作为变量来执行以下CURL命令

curl -v -o POST \
-u "apikey:-------------------------------------" \
-H "Content-Type: application/json" \
-d '{
  "text":"Hello World",
  "features": {
  "sentiment": {},
  "categories": {},
  "concepts": {},
  "keywords": {},
  "emotion": {} 
  }
}' \
"https://gateway-wdc.watsonplatform.net/natural-language- 
understanding/api/v1/analyze?version=2018-03-19" 
$SHELL

我已经尝试了以下方法,但是,尽管回声看起来好像传递了正确的值,但CURL响应是400错误-无效响应。

VAR1='"Hello World"'

echo "VAR1=${VAR1}"
echo 

curl -v -o POST \
-u "apikey:-------------------------------------" \
-H "Content-Type: application/json" \
-d '{
     "text":${VAR1},
     "features": {
     "sentiment": {},
     "categories": {},
     "concepts": {},
     "keywords": {},
     "emotion": {}  
    }
}' \
"https://gateway-wdc.watsonplatform.net/natural-language- 
understanding/api/v1/analyze?version=2018-03-19"
$SHELL

1 个答案:

答案 0 :(得分:2)

(对此有一个重复项,但我永远找不到。)

使用jq之类的工具来构建JSON。

data=$(jq --argjson x "$VAR1" '
  {
    text: $x,
    features: {},
    sentiment: {},
    categories: {},
    concepts: {},
    keywords: {},
    emotion: {}  
  }'
)
curl ... -d "$data" ...