当我回声时我得到这个,当我将它输入到终端时运行
When I echo I get this, which runs when I enter it into the terminal
curl -i -H "Accept: application/json" -H "Content-Type:application/json" -X POST --data '{"account":{"email":"akdgdtk@test","screenName":"akdgdtk","type":"NIKE","passwordSettings":{"password":"Starwars1","passwordConfirm":"Starwars1"}},"firstName":"Test","lastName":"User","middleName":"ObiWan","locale":"en_US","registrationSiteId":"520","receiveEmail":"false","dateOfBirth":"1984-12-25","mobileNumber":"9175555555","gender":"male","fuelActivationDate":"2010-10-22","postalCode":"10022","country":"US","city":"Beverton","state":"OR","bio":"This is a test user","jpFirstNameKana":"unsure","jpLastNameKana":"ofthis","height":"80","weight":"175","distanceUnit":"MILES","weightUnit":"POUNDS","heightUnit":"FT/INCHES"}' xxx:xxxxx@xxxx-www.xxxxx/xxxxx/xxxx/xxxx但是在 bash 脚本文件中运行时,出现此错误
But when run in the bash script file, I get this error
curl: (6) Could not resolve host: application; nodename nor servname provided, or not known curl: (6) Could not resolve host: is; nodename nor servname provided, or not known curl: (6) Could not resolve host: a; nodename nor servname provided, or not known curl: (6) Could not resolve host: test; nodename nor servname provided, or not known curl: (3) [globbing] unmatched close brace/bracket at pos 158这是文件中的代码
curl -i -H '"'Accept: application/json'"' -H '"'Content-Type:application/json'"' -X POST --data "'"'{"account":{"email":"'$email'","screenName":"'$screenName'","type":"'$theType'","passwordSettings":{"password":"'$password'","passwordConfirm":"'$password'"}},"firstName":"'$firstName'","lastName":"'$lastName'","middleName":"'$middleName'","locale":"'$locale'","registrationSiteId":"'$registrationSiteId'","receiveEmail":"'$receiveEmail'","dateOfBirth":"'$dob'","mobileNumber":"'$mobileNumber'","gender":"'$gender'","fuelActivationDate":"'$fuelActivationDate'","postalCode":"'$postalCode'","country":"'$country'","city":"'$city'","state":"'$state'","bio":"'$bio'","jpFirstNameKana":"'$jpFirstNameKana'","jpLastNameKana":"'$jpLastNameKana'","height":"'$height'","weight":"'$weight'","distanceUnit":"MILES","weightUnit":"POUNDS","heightUnit":"FT/INCHES"}'"'" "xxx:xxxxx@xxxx-www.xxxxx/xxxxx/xxxx/xxxx"我认为我的引号有问题,但我玩过很多次,也遇到过类似的错误.所有变量在实际脚本中都定义了不同的函数
I assume there's an issue with my quotation marks, but I've played with them a lot and I've gotten similar errors. All the variables are defined with different functions in the actual script
推荐答案您不需要将包含自定义标题的引号传递给 curl.此外,data 参数中间的变量应该被引用.
You don't need to pass the quotes enclosing the custom headers to curl. Also, your variables in the middle of the data argument should be quoted.
首先,编写一个生成脚本发布数据的函数.这使您免于与 shell 引用有关的各种头痛,并且比在尝试时在 curl 的调用行上提供 post 数据更容易阅读维护脚本:
First, write a function that generates the post data of your script. This saves you from all sort of headaches concerning shell quoting and makes it easier to read an maintain the script than feeding the post data on curl's invocation line as in your attempt:
generate_post_data() { cat <<EOF { "account": { "email": "$email", "screenName": "$screenName", "type": "$theType", "passwordSettings": { "password": "$password", "passwordConfirm": "$password" } }, "firstName": "$firstName", "lastName": "$lastName", "middleName": "$middleName", "locale": "$locale", "registrationSiteId": "$registrationSiteId", "receiveEmail": "$receiveEmail", "dateOfBirth": "$dob", "mobileNumber": "$mobileNumber", "gender": "$gender", "fuelActivationDate": "$fuelActivationDate", "postalCode": "$postalCode", "country": "$country", "city": "$city", "state": "$state", "bio": "$bio", "jpFirstNameKana": "$jpFirstNameKana", "jpLastNameKana": "$jpLastNameKana", "height": "$height", "weight": "$weight", "distanceUnit": "MILES", "weightUnit": "POUNDS", "heightUnit": "FT/INCHES" } EOF }然后很容易在调用 curl 时使用该函数:
It is then easy to use that function in the invocation of curl:
curl -i -H "Accept: application/json" -H "Content-Type:application/json" -X POST --data "$(generate_post_data)" "xxx:xxxxx@xxxx-www.xxxxx/xxxxx/xxxx/xxxx"也就是说,这里有一些关于 shell 引用规则的说明:
This said, here are a few clarifications about shell quoting rules:
-H 参数中的双引号(如在 -H "foo bar" 中)告诉 bash 将里面的内容保留为单个参数(即使它包含空格).
The double quotes in the -H arguments (as in -H "foo bar") tell bash to keep what's inside as a single argument (even if it contains spaces).
--data 参数中的单引号(如在 --data 'foo bar' 中)做同样的事情,除了它们逐字传递所有文本(包括双引号字符和美元符号).
The single quotes in the --data argument (as in --data 'foo bar') do the same, except they pass all text verbatim (including double quote characters and the dollar sign).
要在单引号文本中间插入变量,必须将单引号结束,然后与双引号变量连接,重新打开单引号继续文本:'foo bar'"$variable"'more foo'.
To insert a variable in the middle of a single quoted text, you have to end the single quote, then concatenate with the double quoted variable, and re-open the single quote to continue the text: 'foo bar'"$variable"'more foo'.
更多推荐
将 curl POST 与 bash 脚本函数中定义的变量一起使用
发布评论