BASH-选择变量替换

BASH-选择变量替换,bash,Bash,我需要替换sippet中的一个变量,但我必须在apache虚拟主机中保持“$1”不变,例如: SNIPPET=$(cat <<- 'EOF' <VirtualHost *:80> ServerName ${HOSTNAME} DocumentRoot /usr/local/apache2/htdocs/${HOSTNAME} <Directory /usr/local/apache2/htdocs/${HOSTNAME}>

我需要替换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
)

SNIPPET=$(cat此处不需要使用
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>"
SNIPPET=”\
服务器名${HOSTNAME}
DocumentRoot/usr/local/apache2/htdocs/${HOSTNAME}
选项-索引+FollowSymLinks+多视图
要求所有授权
ProxyPassMatch^/(.\.php(/.*)$fcgi://php56:9000/usr/local/apache2/htdocs/${HOSTNAME}/\$1
"

在您的情况下,如果至少需要一个参数替换,则不能引用here doc分隔符,因为这会将整个here doc视为一个单引号字符串。删除引号后,整个here doc将被视为一个双引号字符串,因此您需要转义任何可能受参数扩展影响的内容。

使用反斜杠将文本设置为
$
${HOSTNAME}/\$1
很好,很好!抱歉,我是新来的。。。。