为什么我的bash脚本在空的空间上打破?

我有一个shell脚本,正在打破虚拟主机和*之间的第42行的空间。 结果,唯一的东西是echo'd到控制台

<VirtualHost 

我想要发生的是我的整个string被回显到控制台。

 <VirtualHost *:80> DocumentRoot /Applications/MAMP/htdocs/web ServerName web.localhost <Directory /Applications/MAMP/htdocs/web> Options Indexes FollowSymLinks MultiViews +Includes AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost> 

这里是我的脚本供参考:

 #!/bin/bash # This script should be used to automate the web site installation checkFileForString () { # $1 = file # $2 = regex # $3 = text to be added declare file=$1 declare regex=$2 declare file_content=$( cat "${file}" ) if [[ ! " $file_content " =~ $regex ]]; then echo "$3" #>> $file else replaceStringInFile $file $regex $3 fi } replaceStringInFile () { # $1 = file # $2 = old string # $3 = new string sed -i -e 's|${2}|${3}|' $1 } createFile () { # $1 = file declare fileToCheck=$1 if [ ! -f $fileToCheck ]; then touch $fileToCheck fi } # Add vhosts to httpd-vhosts.conf echo "Adding vhosts to httpd-vhosts.conf" currentFile="/Applications/MAMP/conf/apache/extra/httpd-vhosts.conf" currentRegex="<VirtualHost\s[*]:80>\s+DocumentRoot\s/Applications/MAMP/htdocs/web\s+ServerName\sweb.localhost" newText="<VirtualHost *:80> DocumentRoot /Applications/MAMP/htdocs/web ServerName web.localhost <Directory /Applications/MAMP/htdocs/web> Options Indexes FollowSymLinks MultiViews +Includes AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost> " checkFileForString $currentFile $currentRegex $newText 

Solutions Collecting From Web of "为什么我的bash脚本在空的空间上打破?"

您需要将变量放在双引号中才能扩展它们,而不用分词和通配符扩展。

 checkFileForString "$currentFile" "$currentRegex" "$newText" 

脚本中的另一个问题是replaceStringInFile()函数。 变量只在双引号内部扩展,而不是单引号。 所以它应该是:

 sed -i -e "s|${2}|${3}|" "$1"