Bash中的cURL - 在单引号之间传递变量

时间:2015-07-27 15:20:34

标签: bash shell curl

我试图通过命令行将参数传递给cURL,这样:

curl -s -X POST -H "Content-Type: text/xml" -H "Cache-Control: no-cache" -d '<Data Token="someToken" Name='"$appName"' ID='"$someVar"' ParseAppID='"$someVar"' ParseRESTKey='"$someVar"' AndroidPackage='"$someVar"' Version="1"></Data>' 'https://prefix.something.com/somePath?InputType=Xml'

(此行实际上是从Postman应用程序中提取的。)

我用Google搜索了这个问题并找到了许多对我不起作用的解决方案(链接是过去的问题......):

  1. 我通过结束单引号尝试isolating变量,这样:'before...'"${someVar}"'...after...'。无法完成请求。
  2. 我尝试传递变量using a file-d @fileName)。无法发布。
  3. 我使用双引号尝试replacing <Data>令牌周围的单引号 - 但命令显然无法接受此类替换。
  4. 我得到的错误是<Error></Error>The server encountered an error and could not complete your request.

    是否有可能存在其他解决方案? 有没有人遇到过这样的问题?

    我会很乐意帮助你。

1 个答案:

答案 0 :(得分:5)

您不会像ID那样围绕Name的值提供引号。也就是说,你需要

'<Data Token="someToken" Name="'"$appName"'" ...>'
                              ^^^
                              |||
                              ||+- shell quote to protect $appName
                              |+- shell quote enclosing the XML
                              +- literal quote embedded in the XML

导致字符串(假设为appName=foo

<Data Token="someToken" Name="foo" ...>