[英]BASH - selective variable substitution
我需要替换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
,可以吗?
您不需要在这里使用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将被视为双引号字符串,因此您需要转义所有可能会受到参数扩展影响的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.