Espaço em branco é recolhido com eco >>

10

Estou criando um script que lê o conteúdo de um arquivo, manipula o conteúdo e anexa a outro arquivo (especificamente o arquivo de hosts virtuais). A formatação e o espaço em branco no arquivo de saída são importantes, 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

Então 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 anexar ao arquivo de destino? Eu procurei por isso, mas todas as perguntas semelhantes não se aplicam ao meu script sem reescrevê-lo.

Jeff
fonte

Respostas:

9

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

Depois de ligar

echo foo    bar

os únicos dados passados ​​para eco pelo shell são que o primeiro argumento é fooe o segundo é bar.

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

echo "foo    bar"

imprimirá todos os quatro espaços.

Dennis
fonte
Em uma nota lateral: acho surpreendente que echo $TEMPLATEfuncione. Ele também deve recolher vários espaços em branco.
Dennis
Sim! Foi isso. Faz todo o sentido, mas não percebi que era esse o caso. Além disso, echo $TEMPLATEestava trabalhando porque eu tinha aspas, mas não consegui copiá-lo para o meu post. Eu não achava isso importante. Eu estava errado!
22413 Jeff Jeff
11
@ Jeff Veja o seguinte: Comandos e argumentos
slhck 22/01
11
@ Jeff, é extremamente importante, ao procurar assistência, recortar e colar em vez de digitar novamente.
precisa saber é o seguinte
@glennjackman eu pensei que poderia me dar bem com redigitação, pois os scripts eram tão curtos e copiar e colar seria uma dor, já que eu estava trabalhando em um terminal. Eu estava errado. lição aprendida. Obrigado pela dica.
23413 Jeff Jeff