首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >K8s生命周期钩子中的转义单引号和双引号

K8s生命周期钩子中的转义单引号和双引号
EN

Stack Overflow用户
提问于 2022-06-30 05:44:53
回答 1查看 356关注 0票数 1
代码语言:javascript
复制
lifecycle:
  preStop:
    exec:
      command: ["sh", "-c", "curl -v  -X PUT -d '\"SHUTTING_DOWN\"'  http://localhost:8080/v1/info/state"]

我希望这会产生一个卷曲的url

代码语言:javascript
复制
curl -v  -X PUT -d '"SHUTTING_DOWN"' http://localhost:8080/v1/info/state 

我是如何得到额外的单引号包围‘“SHUTTING_DOWN”’

代码语言:javascript
复制
curl -v  -X PUT -d ''"SHUTTING_DOWN"'' http://localhost:8080/v1/info/state 

有什么建议吗,我哪里出错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-30 11:50:16

我建议尽可能多的删除引号。在最初的示例中,您有来自YAML的一层引号,以及来自sh -c包装器的一层引号。由于您需要HTTP本体本身具有单引号和双引号--您需要通过连线发送带有这两种引号的字符串'"SHUTTING_DOWN"' --尽可能多地删除引用是有帮助的。

YAML中,这两种引号的行为都不同。反斜杠转义只在双引用字符串中工作,所以在外层可能需要这样做;然后在双引号中需要单引号;然后需要反斜杠-转义双引号。

具体来说,在YAML中,字符串周围的引号通常是可选的,除非它们需要消除事物的歧义(强制'true''12345')为字符串。这样你就可以去掉一层引用了。如果您将YAML块样式与一行中的一个列表项一起使用,您也会发现这一点更加清晰。

代码语言:javascript
复制
command:
  - /bin/sh
  - -c
  - curl -v -X PUT -d "'\"SHUTTING_DOWN\"'" http://localhost:8080/v1/info/state

不过,我可能还能再往前走一步。您没有使用环境变量展开、多个命令或任何其他需要shell的操作。这意味着您不需要sh -c包装器。如果删除这一点,那么唯一需要引用的层是YAML引用;您不需要担心在YAML引用的字符串中嵌入shell转义字符串。

您确实需要确保正确处理引号。如果字符串以'"开头,则YAML将将其解析为引号字符串,如果不是,则解析为没有引号的字符串中没有转义选项。。因此,您可能需要将整件事情放在一个双引号字符串中,并反斜杠-转义作为值一部分的双引号。

请记住,每个单词都需要进入一个单独的YAML列表项。curl和许多命令一样,可以将选项和参数组合在一起,这样就可以将-XPUT作为单个参数,也可以将-XPUT作为两个单独的参数,但-X PUT作为单个单词将包含空间作为该单词的一部分,并将其混淆。

代码语言:javascript
复制
command:
  - curl
  - -v
  - -X
  - PUT
  - -d
  - "'\"SHUTTING_DOWN\"'"
  - http://localhost:8080/v1/info/state
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72810814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档