elasticsearch,Bash,Shell,Curl,elasticsearch" /> elasticsearch,Bash,Shell,Curl,elasticsearch" />

Bash 旋度转义单引号

Bash 旋度转义单引号,bash,shell,curl,elasticsearch,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_cod

我怎样才能做到这一点

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"}'
玛丽的中的”导致该操作失败。我从一个类似于
cat curl-cmd.txt | sh
的文件运行它,但它也不能从命令行运行。我试过使用
\'
\\'
\u0027
(unicode
'


我卡住了

我也有同样的问题。最简单的解决方案是,除了用一组单引号将撇号括起来外,还要用反斜杠将其转义<代码>'\''

对于您的用例,将
Mary的
更改为
Mary的
,它应该可以工作

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"}'
另一种方法是将POST数据(
-d
)用双引号括起来,同时用反斜杠转义JSON字符串中所有嵌套的双引号


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

示例

-双引号示例-
使用\“

如果你想在bash上打印,她说“是的,我愿意”

-单引号示例-
使用'\''

如果你想在bash上打印我女儿的狗喜欢猫食

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

好的,正如我在问题中所说的,我已经尝试过了。出于某种原因,我需要您的疯狂解决方案,从PHP的shell_exec()调用curl,即使我使用的是
--data urlencode
,也可能与Linux在字符串变为curl之前处理字符串的方式有关?不确定。第一种解决方案在我的Mac控制台上不起作用,它产生的效果与根本不转义相同。@PJBrunet-我猜是shell在命令行上执行字符串连接。(例如,
echo'hello'\'world'
->
hello'world
)我们可以在@ASH中实现这一点吗?我不确定我是否理解这个问题;您是否有具体的要求?这种技术(即shell字符串连接)只要您使用的是现代shell(例如bash、zsh、sh),就应该适用于任何有关该问题的
curl
请求或命令,而不仅仅是此特定的Elasticsearch请求。
echo "She said \"Yes I Do\""
#output:
She said "Yes I Do"

echo 'she said "Yes I Do"' 
#output:
She said "Yes I Do"
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