在 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

但您仍然需要按照注释 (\$) 中的建议对 $ 符号进行转义。