CURL逃脱单引号

mik*_*keb 25 bash shell curl elasticsearch

我怎样才能做到这一点?

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"}'
Run Code Online (Sandbox Code Playgroud)

'Mary's引起此故障.我从一个文件运行它,cat curl-cmd.txt | sh但它也无法从命令行工作.我已经尝试使用\'\\'\u0027(unicode的')

我被卡住了

Tra*_*rke 59

我有同样的问题.最简单的解决方案是使用反斜杠转义撇号,并将其包装在一组单引号中.'\''

对于您的用例,更改Mary'sMary'\''s,它应该工作.

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"}'
Run Code Online (Sandbox Code Playgroud)

另一种方法是将POST数据(-d)用双引号括起来,同时使用反斜杠转义JSON字符串中所有嵌套的双引号.

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\"}"
Run Code Online (Sandbox Code Playgroud)

  • 出于某种原因,我需要你疯狂的解决方案来从 PHP 的 shell_exec() 调用curl,即使我使用的是`--data-urlencode`也许与Linux在curl之前处理字符串的方式有关?没有把握。 (2认同)

avi*_*amg 5

经验法则如果您想在 bash 上的字符串中明确表示单引号或双引号, 使用反斜杠 ( \) 取决于您的字符串包装器(应该是相同的类型)。反斜杠 ( \) 字符用于转义具有特殊含义的字符,例如换行符、反斜杠本身或引号字符。

例子

-双引号示例-Use \"

如果您想在 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"
Run Code Online (Sandbox Code Playgroud)

-单引号示例-Use '\''

如果您想在 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
Run Code Online (Sandbox Code Playgroud)