CURL escape single quote

六眼飞鱼酱① 提交于 2020-05-22 11:02:30

问题


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


回答1:


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\"}"



回答2:


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


来源:https://stackoverflow.com/questions/32122586/curl-escape-single-quote

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!