AWS Cloudformation使用Fn :: Join在文件中输出双引号

Lui*_*Lui 3 amazon-web-services aws-cloudformation

经过大量的研究和挫折,我并没有得到我希望的输出.

例如,期望输出到文件中

"accessKeyId":"UIIUHO]SOMEKEY[SHPIUIUHIU"
Run Code Online (Sandbox Code Playgroud)

但我得到的是

accessKeyId:UIIUHO]SOMEKEY[SHPIUIUHIU
Run Code Online (Sandbox Code Playgroud)

以下是AWS Cloudformation模板中的行

{"Fn::Join": ["", ["echo \" accessKeyId:", {"Ref": "AccessKeyId"}, "\" >>  /home/ubuntu/myfile.json"] ] }, 
Run Code Online (Sandbox Code Playgroud)

我已经尝试在echo语句中添加\"但是没有输出引号.有人能说明如何在上面生成所需的输出吗?

hue*_*ois 7

这是一个正确逃避报价的问题.

原因是:\"CloudFormation字符串内部被转义为"(双引号).

例如,"hello \"me\""给你:

hello "me"
Run Code Online (Sandbox Code Playgroud)

在你的行中,你真正为bash提供的是:

echo " accessKeyId:XXXXX" >> /home/ubuntu/myfile.json
Run Code Online (Sandbox Code Playgroud)

考虑bash使用引号,你得到字符串

accessKeyId:XXXXX
Run Code Online (Sandbox Code Playgroud)

你的内心 /home/ubuntu/myfile.json

为了解决您的问题,我建议使用:

{"Fn::Join": ["", ["echo '\"accessKeyId\":\"", {"Ref": "AccessKeyId"}, "\"' >>  /home/ubuntu/myfile.json"] ] },
Run Code Online (Sandbox Code Playgroud)

这是逃脱的

echo '"accessKeyId":"XXXXX"' >>  /home/ubuntu/myfile.json
Run Code Online (Sandbox Code Playgroud)

(很难读:echo使用的整个字符串都在单引号内).

我现在无法尝试,但它应该做到这一点.