2017-02-14 85 views
0

我需要一個sippet之內更換一個變量,但我必須保持不變的「$ 1」在Apache虛擬主機,例如:BASH - 選擇變量替換

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,可能?

+1

使用反斜槓有一個文字'$':'$ {HOSTNAME}/\ $ 1' – oliv

+0

好,有用!對不起,但我是新的.... – hellb0y77

回答

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>" 

在你的情況下,如果你想至少一個參數替換,你不能引用在這裏-doc的分隔符,因爲這樣對待整個這裏-DOC爲單引號的字符串。刪除引號後,整個here-doc被視爲雙引號字符串,因此您需要轉義任何可能會受到參數擴展影響的內容。