如何在bash中将变量传递给HEREDOC?


16

我想做这样的事情:

$ NAME=John
$ cat << '==end' > test
My name is $NAME
==end

$ cat test
My name is John

有任何想法吗?

Answers:


24
cat <<EOF > test
My name is $NAME
EOF

甚至

cat <<==end > test
My name is $NAME
==end

为我工作。

当你像看起来==end'变量不能代替。

啊,它在手册页中(外观3.6.6):

此处文档的格式为:

      <<[-]word
              here-document
      delimiter

没有对word执行参数扩展,命令替换,算术扩展或路径名扩展。如果在word中引用了任何字符,则 分隔符是对word删除引用的结果,并且本文档中的行不会扩展。如果未引用word,则对本文的所有行进行参数扩展,命令替换和算术扩展。[...]


您也可以使用双引号(cat << "==end" > test),但硬引号确实可以防止替换。
2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.