带有大量单引号和双引号的命令的Bash脚本

时间:2015-10-22 20:49:53

标签: bash curl quotes double-quotes single-quotes

我需要使用curl命令:

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

如果-d的参数以@开头,则参数的其余部分将被视为包含数据的文件的名称。文件名-表示标准输入,curl的标准输入由EOF令牌之间的行提供。

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

... -d "{\"auth_token\": \"YOUR_AUTH_TOKEN\", \"text\": \"$p\"}" ...

答案 1 :(得分:0)

替代chepner非常好的答案:

data=$( printf '{"auth_token":"YOUR_AUTH_TOKEN","text":"%s"}' "$p" )
curl -d "$data" http://localhost:3030/widgets/welcome