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.

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.