如何抑制bash heredocs中的变量替换

时间:2015-07-27 05:11:36

标签: bash syntax heredoc

是否有可能创建一个不受变量扩展影响的heredoc?

e.g。

    <input type='text'  class='form-control'  focus='true'/>
    <input type='text'  class='form-control'  focus='true'/>
    <input type='text'  class='form-control'  focus='true'/>

更新我知道cat <<-EOF > somefile.sh Do not print current value of $1 instead evaluate it later. EOF 转义。我的实际heredoc中有很多变量 - 而且它很容易出错而且很繁琐。

2 个答案:

答案 0 :(得分:6)

引用分隔符:

cat <<-"EOF"  > somefile.sh
Do not print current value of $1 instead evaluate it later.
EOF

这导致:

$ cat somefile.sh 
Do not print current value of $1 instead evaluate it later.

文档

  

here-documents的格式为:

          <<[-]word
                  here-document
          delimiter
     

不对字执行参数和变量扩展,命令替换,算术扩展或路径名扩展。 如果   引用单词中的任何字符,分隔符是结果   引用删除单词,以及here-document中的行   未扩展。如果单词不加引号,则here-document的所有行都要进行参数扩展,命令   替换和算术扩展,字符序列   \被忽略,\必须用于引用字符\,   $,和`。

     

如果重定向运算符是&lt;&lt; - ,则从输入行和包含的行中删除所有前导制表符   分隔符。这允许shell脚本中的文档   以自然的方式缩进。 [重点补充。]

答案 1 :(得分:0)

在$ sign

之前加上反弹
$ VAR=XXX
$ cat << END
> dk
> \$VAR
> END
dk
$VAR