原则上,使用语法就足够了
cat >file <
$my_var
EOL
也就是说,按原样使用变量,而不必转义$.
而不是
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
^ ^
说
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
来自man bash:
Here Documents
This type of redirection instructs the shell to read input from the
current source until a line containing only delimiter (with no
trailing blanks) is seen. All of the lines read up to that point are
then used as the standard input for a command.
The format of here-documents is:
06003
No parameter expansion, command substitution, arithmetic expansion,
or pathname expansion is performed on word. If any characters in word
are quoted, the delimiter is the result of quote removal on word, and
the lines in the here-document are not expanded. If word is
unquoted, all lines of the here-document are subjected to parameter
expansion, command substitution, and arithmetic expansion. In the
latter case, the character sequence \ is ignored, and \
must be used to quote the characters \, $, and `.
看一个例子:
$cat a.sh
r="hello"
cat - <
hello
$r
EOL
echo "double quotes"
cat - <
hello
$r
EOL
echo "single quotes"
cat - <
hello
$r
EOL
让我们来运行它:
$bash a.sh
hello
hello
double quotes
hello
$r
single quotes
hello
$r