你如何在heredoc中转义字符?

Xeo*_*oss 29 linux bash heredoc

我正在使用 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
Run Code Online (Sandbox Code Playgroud)

照原样,当我完成将它注入文件时,我只剩下这个:

server {
    listen 80 default;
    server_name _;
    root /var/www/;
}
Run Code Online (Sandbox Code Playgroud)

Ign*_*ams 38

bash(1)手册页:

如果word中的任何字符被引用,则 分隔符word上引用删除的结果,并且 here-document 中的行不会被扩展。

cat > /etc/nginx/sites-available/default_php <<"END"
Run Code Online (Sandbox Code Playgroud)

  • +1 转义“限制字符串”也有效(`\END`)。另见 http://tldp.org/LDP/abs/html/here-docs.html#EX71C (3认同)
  • 值得注意的是,虽然这回答了OP问题中的第二个选项,但它并没有回答问题标题。这里的访问者可能希望回答第一个选项,他们仍然需要一些扩展,在这种情况下,他们应该使用 @halfgaar 的答案。当然,这个答案仍然非常有用,并且显然确实达到了OP的目的。 (2认同)

Hal*_*aar 35

只需一个反斜杠:

cat > /tmp/boeboe <<END
server {
    listen 80 default;
    server_name _;
    root /var/www/\$host';
}
END
Run Code Online (Sandbox Code Playgroud)

  • 伊格纳西奥说了什么,但我不知道:) (2认同)