在 Yaml 中转义包含引号和撇号的 cURL 命令
Escape cURL command in Yaml which contains quotes and apostrophes
我有这个 cURL 命令:
curl -X POST --data-urlencode 'payload={"text": "A new version has been deployed to production."}' https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX
我需要在具有 Yaml 支持的 GitLab CI 文件中使用它。
Yaml 解析器不接受它。通常我会用引号将它括起来,但我已经在命令中同时使用了引号和撇号。
这就是命令现在的样子。
如何正确转义序列?
deploy:
stage: deploy
script:
- "curl -X POST --data-urlencode 'payload={"text": "A new version has been deployed to production."}' https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX"
最简单的方法是使用块标量:
deploy:
stage: deploy
script: |-
curl -X POST --data-urlencode 'payload={"text": "A new version has been deployed to production."}' https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX
|
开始一个文字块标量,-
告诉 YAML 丢弃尾随换行符(否则它会成为标量的一部分)。为了可读性,您可以改用折叠块标量(换行符将转换为空格):
deploy:
stage: deploy
script: >-
curl -X POST --data-urlencode 'payload={"text":
"A new version has been deployed to production."}'
https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX
最后,用双引号也是可以的,只要把标量里面的双引号转义即可(换行也折成空格):
deploy:
stage: deploy
script:
"curl -X POST --data-urlencode 'payload={\"text\":
\"A new version has been deployed to production.\"}'
https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX"
我有这个 cURL 命令:
curl -X POST --data-urlencode 'payload={"text": "A new version has been deployed to production."}' https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX
我需要在具有 Yaml 支持的 GitLab CI 文件中使用它。 Yaml 解析器不接受它。通常我会用引号将它括起来,但我已经在命令中同时使用了引号和撇号。
这就是命令现在的样子。
如何正确转义序列?
deploy:
stage: deploy
script:
- "curl -X POST --data-urlencode 'payload={"text": "A new version has been deployed to production."}' https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX"
最简单的方法是使用块标量:
deploy:
stage: deploy
script: |-
curl -X POST --data-urlencode 'payload={"text": "A new version has been deployed to production."}' https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX
|
开始一个文字块标量,-
告诉 YAML 丢弃尾随换行符(否则它会成为标量的一部分)。为了可读性,您可以改用折叠块标量(换行符将转换为空格):
deploy:
stage: deploy
script: >-
curl -X POST --data-urlencode 'payload={"text":
"A new version has been deployed to production."}'
https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX
最后,用双引号也是可以的,只要把标量里面的双引号转义即可(换行也折成空格):
deploy:
stage: deploy
script:
"curl -X POST --data-urlencode 'payload={\"text\":
\"A new version has been deployed to production.\"}'
https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX"