在 heredoc 中转义 $ 插值
Escaping $ interpolation in heredoc
我有文档:
user_data = <<-USERDATA
#!/bin/bash
echo "server {" >> /etc/nginx/sites-available/site
echo " listen 80;" >> /etc/nginx/sites-available/site
echo " location / {" >> /etc/nginx/sites-available/site
echo " proxy_set_header X-Forwarded-For $remote_addr;" >> /etc/nginx/sites-available/site
echo " proxy_set_header Host $http_host;" >> /etc/nginx/sites-available/site
echo " }" >> /etc/nginx/sites-available/site
echo "}" >> /etc/nginx/sites-available/site
-USERDATA
现在,$remote_addr;
和 $http_host;
不应该被插值,而是在我得到输出时是空的。
我试过使用 $$remote_addr
;但这也是 returns 一个空结果,而不是字符串 $remote_addr;
谁能看出我在转义 $ 字符方面做错了什么?
解决方法
通过使用 terraforms 插值,我能够渲染字符串 ${"$remote_addr;"}
其中 returns $remote_addr;
但也许存在更好的解决方案?
您可以使用定界符将文本块插入文件,使其更易于阅读,例如:
#!/bin/bash
cat <<EOM >/etc/nginx/sites-available/site
server {
listen 80;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
}
}
EOM
但您仍然需要按照注释 (\$) 中的建议对 $ 符号进行转义。
我有文档:
user_data = <<-USERDATA
#!/bin/bash
echo "server {" >> /etc/nginx/sites-available/site
echo " listen 80;" >> /etc/nginx/sites-available/site
echo " location / {" >> /etc/nginx/sites-available/site
echo " proxy_set_header X-Forwarded-For $remote_addr;" >> /etc/nginx/sites-available/site
echo " proxy_set_header Host $http_host;" >> /etc/nginx/sites-available/site
echo " }" >> /etc/nginx/sites-available/site
echo "}" >> /etc/nginx/sites-available/site
-USERDATA
现在,$remote_addr;
和 $http_host;
不应该被插值,而是在我得到输出时是空的。
我试过使用 $$remote_addr
;但这也是 returns 一个空结果,而不是字符串 $remote_addr;
谁能看出我在转义 $ 字符方面做错了什么?
解决方法
通过使用 terraforms 插值,我能够渲染字符串 ${"$remote_addr;"}
其中 returns $remote_addr;
但也许存在更好的解决方案?
您可以使用定界符将文本块插入文件,使其更易于阅读,例如:
#!/bin/bash
cat <<EOM >/etc/nginx/sites-available/site
server {
listen 80;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
}
}
EOM
但您仍然需要按照注释 (\$) 中的建议对 $ 符号进行转义。