如何转义 heredoc 中的字符?

如何转义 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

事实上,当我将它注入到文件中后,剩下这些:

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

相关内容