添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

How can I make this work?

curl -XPOST 'http://localhost:9290/location/place' -d '{"geoloc": {"lat": "38.1899", "lon": "-76.5087"}, "longitude": "-76.5087", "admin_name1": "Maryland", "admin_name2": "St. Mary's", "admin_name3": "", "postal_code": "20692", "admin_code3": "", "country_code": "US", "admin_code1": "MD", "latitude": "38.1899", "admin_code2": "037", "accuracy": null, "place_name": "Valley Lee"}'

The ' in Mary's is causing this to fail. I am running it from a file like cat curl-cmd.txt | sh but it won't work from the command line either. I've tried using \' and \\' and \u0027 (the unicode ')

I'm stuck

I had the same problem. The simplest solution is to escape the apostrophe with a backslash in addition to wrapping it in a set of single quotes. '\''

For your use case, change Mary's to Mary'\''s and it should work.

curl -XPOST 'http://localhost:9290/location/place' -d '{"geoloc": {"lat": "38.1899", "lon": "-76.5087"}, "longitude": "-76.5087", "admin_name1": "Maryland", "admin_name2": "St. Mary'\''s", "admin_name3": "", "postal_code": "20692", "admin_code3": "", "country_code": "US", "admin_code1": "MD", "latitude": "38.1899", "admin_code2": "037", "accuracy": null, "place_name": "Valley Lee"}'
  

An alternate approach is to wrap the POST data (-d) in double quotes while escaping all nested occurrences of double quotes in the JSON string with a backslash.

curl -XPOST 'http://localhost:9290/location/place' -d "{\"geoloc\": {\"lat\": \"38.1899\", \"lon\": \"-76.5087\"}, \"longitude\": \"-76.5087\", \"admin_name1\": \"Maryland\", \"admin_name2\": \"St. Mary's\", \"admin_name3\": \"\", \"postal_code\": \"20692\", \"admin_code3\": \"\", \"country_code\": \"US\", \"admin_code1\": \"MD\", \"latitude\": \"38.1899\", \"admin_code2\": \"037\", \"accuracy\": null, \"place_name\": \"Valley Lee\"}"
                For some reason I needed your crazy solution for calling curl from PHP's shell_exec(), even though I'm using --data-urlencode Maybe has something to do with the way Linux processes the string before it gets to curl? Not sure.
– PJ Brunet
                Jan 21, 2018 at 9:23
                First solution does not work on my Mac's console it produces the same effect as not escaping at all.
– Slobodan Antonijević
                Feb 1, 2018 at 13:56
                @PJBrunet - I presume it is the shell performing string concatenation on the command line. (e.g. echo 'hello'\''world' -> hello'world)
– Travis Clarke
                Feb 3, 2018 at 21:58
                @ASH – I am not sure if I understand the question; do you have a specific request in mind? This technique (i.e. shell string concatenation) should work for any curl request or command for that matter, not just this specific Elasticsearch request, as long as you are using a modern shell (e.g. bash, zsh, sh).
– Travis Clarke
                Oct 25, 2018 at 5:25

Rule Of Thumb: In case you want explicitly representing single quote or double quotes in your string on bash, Use backslash (\) depends on your String Wrapper (should be in the same type). The backslash (\) character is used to escape characters that otherwise have a special meaning, such as newline, backslash itself, or the quote character.

Examples:

-Double Quote Example - Use \"

in case you want to print on bash She said "Yes I Do"

echo "She said \"Yes I Do\""
#output:
She said "Yes I Do"
echo 'she said "Yes I Do"' 
#output:
She said "Yes I Do"

-Single Quote example - Use '\''

in case you want to print on bash My Daughter's dog likes cat treats

echo "My Daughter's dog likes cat treats"
#output:
My Daughter's dog likes cat treats
echo 'My Daughter'\''s dog likes cat treats' 
#output:
My Daughter's dog likes cat treats
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.