我正在使用一个 bash 脚本,试图阻止它尝试替换 heredoc 中的变量。如何设置 heredoc 以 A) 转义变量名称而不是解析它们或 B) 返回整个字符串而不进行任何修改?
cat > /etc/nginx/sites-available/default_php <<END
server {
listen 80 default;
server_name _;
root /var/www/$host; <--- $host is a problem child
}
END
事实上,当我将它注入到文件中后,剩下这些:
server {
listen 80 default;
server_name _;
root /var/www/;
}
答案1
从bash(1)
手册页中:
如果任何字符单词被引用, 分隔符是删除引号的结果单词,并且此处文档中的行不会被扩展。
cat > /etc/nginx/sites-available/default_php <<"END"
答案2
只需使用反斜杠:
cat > /tmp/boeboe <<END
server {
listen 80 default;
server_name _;
root /var/www/\$host';
}
END
答案3
@Xeoncross(以及通过搜索引擎结果到达这里的所有内容):可以通过单引号停止标记来禁用变量替换:
cat > /tmp/boeboe << 'END'
server {
listen 80 default;
server_name _;
root /var/www/$host;
}
# Example : here is another occurrence of '$host' which won't be substituted either
# When single-quoting the stop token, you don't have to escape all '$myVariable' anymore
END