O espaço em branco é recolhido com eco

9

Estou criando um script que lê o conteúdo de um arquivo, manipula o conteúdo e acrescenta a outro arquivo (especificamente o arquivo de hosts virtuais). A formatação e o espaço em branco no arquivo de saída é importante, mas quando escrevo o conteúdo, o espaço em branco é removido.

VHOST_PATH="/etc/apache2/extra/httpd-vhosts.conf"
TEMPLATE_PATH="./template.conf"
TEMPLATE=$(<TEMPLATE_PATH)
# manipulating $TEMPLATE
echo $TEMPLATE                   #outputs correct whitespace
echo $TEMPLATE >> $VHOST_PATH    #does not output correct whitespace

O primeiro eco produz algo como

<VirtualHost *:80>
    ServerAdmin webmaster@domain
    DocumentRoot "root/web"
    ServerName domain
    ErrorLog "root/logs/error_log"
</VirtualHost>

mas a string que entra no arquivo é

<VirtualHost *:80> ServerAdmin webmaster@domain DocumentRoot "root/web" ServerName domain ErrorLog "root/logs/error_log" </VirtualHost>

Como preservo o espaço em branco ao acrescentar no arquivo de destino? Eu procurei por isso, mas todas as perguntas semelhantes não se aplicam ao meu script sem reescrevê-lo.

    
por Jeff 22.01.2013 / 23:01

1 resposta

9

Como qualquer outro programa, o echo interpreta strings separadas por espaço em branco como argumentos diferentes.

Depois de ligar

echo foo    bar

o único dado que é passado para ecoar pelo shell é que o primeiro argumento é foo e o segundo é bar .

Para passar uma string inteira contendo espaços em branco como um único argumento, coloque-a entre aspas duplas:

echo "foo    bar"

imprimirá todos os quatro espaços.

    
por 22.01.2013 / 23:06

Tags