我需要替换sippet中的变量,但我必须在apache虚拟主机中保留“$ 1”,例如:
SNIPPET=$(cat <<- 'EOF'
<VirtualHost *:80>
ServerName ${HOSTNAME}
DocumentRoot /usr/local/apache2/htdocs/${HOSTNAME}
<Directory /usr/local/apache2/htdocs/${HOSTNAME}>
Options -Indexes +FollowSymLinks +MultiViews
Require all granted
</Directory>
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php56:9000/usr/local/apache2/htdocs/${HOSTNAME}/$1
</VirtualHost>
EOF
)
我需要更改${HOSTNAME}
但不是$1
,是否可以?
答案 0 :(得分:0)
您不需要在此使用cat
;字符串可以包含嵌入的换行符。
SNIPPET="\
<VirtualHost *:80>
ServerName ${HOSTNAME}
DocumentRoot /usr/local/apache2/htdocs/${HOSTNAME}
<Directory /usr/local/apache2/htdocs/${HOSTNAME}>
Options -Indexes +FollowSymLinks +MultiViews
Require all granted
</Directory>
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php56:9000/usr/local/apache2/htdocs/${HOSTNAME}/\$1
</VirtualHost>"
在您的情况下,您希望至少有一个参数替换,您不能引用here-doc分隔符,因为它将整个 here-doc视为单引号字符串。删除引号后,整个here-doc将被视为双引号字符串,因此您需要转义任何可能会受参数扩展限制的内容。