在单引号内的双引号内转义单引号
Escape single quote within double quote within single quote
我正在发出一个 curl 命令,理想情况下看起来像这样(请注意,由于缺少转义,这是不正确的):
curl -X POST --data-urlencode 'payload={"channel": "@somebody", "text": "I'm sending you a test message. Let me know if you get it."}' https://hooks.slack.com/services/XXX
单词 I'm 中的单引号导致失败。但是,我不确定如何转义此引号,因为有多个级别的嵌套引号。
第二个问题,如果文本字符串中有双引号怎么办?那些怎么可能逃脱?
我已经阅读了有关转义的内容并查看了其他 SO posts(包括 How to escape single-quotes within single-quoted strings?),但我似乎无法找到任何解决方案。链接 post 讨论单引号中的单引号并通过使用双引号解决该问题。但是,我的单引号已经在双引号中了。所以这个比较复杂。
非常感谢您的帮助。
一个简单的建议:当有疑问并且没有特殊需要迫使您同时使用单引号和双引号时,只需规范化引号并转义内部引号:
curl -X POST --data-urlencode "payload={\"channel\": \"@somebody\", \"text\": \"I'm sending you a test message. Let me know if you get it.\"}" https://hooks.slack.com/services/XXX
它更简洁直观。
如果你真的想把双引号里面的单引号转义:
curl -X POST --data-urlencode 'payload={"channel": "@somebody", "text": "I'\''m sending you a test message. Let me know if you get it."}' https://hooks.slack.com/services/XXX
无需任何转义等,您可以使用 here-doc 并将其传递给您的 curl
命令:
cat<<-'EOF' | curl -X POST --data-urlencode @- https://hooks.slack.com/services/XXX
payload={"channel": "@somebody", "text": "I'm sending you a test message. Let me know if you get it."}
EOF
此处@-
将使curl
从标准输入读取数据。
我正在发出一个 curl 命令,理想情况下看起来像这样(请注意,由于缺少转义,这是不正确的):
curl -X POST --data-urlencode 'payload={"channel": "@somebody", "text": "I'm sending you a test message. Let me know if you get it."}' https://hooks.slack.com/services/XXX
单词 I'm 中的单引号导致失败。但是,我不确定如何转义此引号,因为有多个级别的嵌套引号。
第二个问题,如果文本字符串中有双引号怎么办?那些怎么可能逃脱?
我已经阅读了有关转义的内容并查看了其他 SO posts(包括 How to escape single-quotes within single-quoted strings?),但我似乎无法找到任何解决方案。链接 post 讨论单引号中的单引号并通过使用双引号解决该问题。但是,我的单引号已经在双引号中了。所以这个比较复杂。
非常感谢您的帮助。
一个简单的建议:当有疑问并且没有特殊需要迫使您同时使用单引号和双引号时,只需规范化引号并转义内部引号:
curl -X POST --data-urlencode "payload={\"channel\": \"@somebody\", \"text\": \"I'm sending you a test message. Let me know if you get it.\"}" https://hooks.slack.com/services/XXX
它更简洁直观。
如果你真的想把双引号里面的单引号转义:
curl -X POST --data-urlencode 'payload={"channel": "@somebody", "text": "I'\''m sending you a test message. Let me know if you get it."}' https://hooks.slack.com/services/XXX
无需任何转义等,您可以使用 here-doc 并将其传递给您的 curl
命令:
cat<<-'EOF' | curl -X POST --data-urlencode @- https://hooks.slack.com/services/XXX
payload={"channel": "@somebody", "text": "I'm sending you a test message. Let me know if you get it."}
EOF
此处@-
将使curl
从标准输入读取数据。