4

我需要使用 curl 命令:

curl -d '{ "auth_token": "YOUR_AUTH_TOKEN", "text": "嘿,看看我能做什么!" }' \ http://localhost:3030/widgets/welcome

在 bash 脚本中,而不是“嘿,看看我能做什么!” “YOUR_AUTH_TOKEN”之后;我需要一个变量$p

这是我第一次尝试 bash 脚本并阅读有关引号等的教程,但我仍然无法使其工作。

4

2 回答 2

4

最简单的做法是从此处的文档(一种动态创建的临时文件)中读取数据,而不是尝试将整个内容引用为字符串:

curl -d@- http://localhost:3030/widgets/welcome <<EOF
{ "auth_token": "YOUR_AUTH_TOKEN",
  "text": "$p" }
EOF

如果 to 的参数以-da 开头@,则参数的其余部分被视为包含数据的文件的名称。文件名-表示标准输入,标准输入curlEOF标记之间的行提供。

另一种方法是对字符串进行双引号并转义所有嵌入的双引号。呸。

... -d "{\"auth_token\": \"YOUR_AUTH_TOKEN\", \"text\": \"$p\"}" ...
于 2015-10-22T20:57:35.077 回答
0

chepner 非常好的答案的替代方法:

data=$( printf '{"auth_token":"YOUR_AUTH_TOKEN","text":"%s"}' "$p" )
curl -d "$data" http://localhost:3030/widgets/welcome
于 2015-10-22T21:06:58.493 回答