繁体   English   中英

BASH-选择性变量替换

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM