You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Heredoc中转义$插值?附相关代码示例

嘿,这个问题我太熟悉了!在Bash的Heredoc里要阻止$符号被shell自动插值,有两个非常实用的方法,咱们一个个说:

方法1:给Heredoc分界符包裹单引号

这是最省心的做法——只要给你的USERDATA分界符加上单引号,整个Heredoc块里的所有$符号都会被当作普通文本处理,不会被shell解析成变量。修改后的代码长这样:

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

注意哦,分界符-'USERDATA'里的单引号是直接加在分界符前后的,而且后面的结束分界符USERDATA不能有任何缩进(如果你的代码里有缩进的话,要确保结束符顶格写)。

方法2:逐个转义$符号

如果你只是想保留部分$符号,其他的还需要正常插值,那可以给每个需要保留的$前面加反斜杠\,把它转义成普通字符。比如这样修改:

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

这种方式更灵活,适合混合场景——比如你可能在Heredoc里既有需要保留的$remote_addr,又有需要插值的shell变量,就可以用这个方法针对性转义。

两种方法都能解决你的问题,看你具体需求选就行啦~

内容的提问来源于stack exchange,提问作者user191152

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:53:47