前言
一般来说,我们在写yaml文件的时候,遇到单行需要转移的特殊字符,比如: ' * 总之奇奇怪怪的转移需求。比如以下例子:
1 2
| scripts: - 'echo {''"''userName''"'': ''"''${GITLAB_USER_NAME}''"'', ''"''jobName''"'': ''"''${XXX_textinput}''"'', ''"''CI_PIPELINE_CREATED_AT''"'': ''"''${CI_PIPELINE_CREATED_AT}''"'', ''"''CI_JOB_STATUS''"'': ''"''${CI_JOB_STATUS}''"'', ''"''CI_JOB_URL''"'': ''"''${CI_JOB_URL}''"''} > tmp.json'
|
这转义双引号把我给整麻了。
解决
实际上,我们都知道| && |- && |+ 这几个功能的用法。
介绍语法的时候,告诉你这个是保留换行符,并且+ - 分别是保留末尾换行符,还是说删除末尾换行符。
其实我们(也许只有我自己)都没有意识到,它既然保留了换行符,那说明什么,说明他把换行符给转义成普通文本了。那我们是不是可以根据这个特性直接去使用, 而不是我们自己通过单引号去转义字符???
这样是不是看着顺眼许多了,我们不需要关注yaml里面的转义,只需要关注shell中的转义即可。
1 2 3
| scripts: - |- echo {'"'userName'"': '"'${GITLAB_USER_NAME}'"', '"'jobName'"': '"'${XXX_textinput}'"', '"'CI_PIPELINE_CREATED_AT'"': ''"''${CI_PIPELINE_CREATED_AT}'"', '"'CI_JOB_STATUS'"': '"'${CI_JOB_STATUS}'"', '"'CI_JOB_URL'"': '"'${CI_JOB_URL}'"'} > tmp.json
|
顺便多一嘴,如果是json拼接多话,用jq命令可能会比较好,缺点是有可能没有这个命令
1 2
| - |- echo '"'${GITLAB_USER_NAME},${XXX_textinput},${CI_PIPELINE_CREATED_AT},${CI_JOB_STATUS},${CI_JOB_URL}'"' | ./jq 'split(",")' | ./jq "{userName: .[0], jobName: .[1], CI_PIPELINE_CREATED_AT: .[2], CI_JOB_STATUS: .[3], CI_JOB_URL: .[4]}"
|