El espacio en blanco se contrae con eco >>

10

Estoy creando un script que lee el contenido de un archivo, manipula el contenido y lo agrega a otro archivo (específicamente el archivo de hosts virtuales). El formato y el espacio en blanco en el archivo de salida es importante, pero cuando escribo el contenido, el espacio en blanco se elimina.

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

Entonces el primer eco produce algo como

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

pero la cadena que ingresa al archivo es

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

¿Cómo conservo el espacio en blanco al agregarlo al archivo de destino? He buscado esto, pero todas las preguntas similares no se aplican a mi script sin reescribirlo.

Jeff
fuente

Respuestas:

9

Como cualquier otro programa, echo interpreta cadenas separadas por espacios en blanco como argumentos diferentes.

Despues de llamar

echo foo    bar

Los únicos datos que el shell pasa al eco es que el primer argumento es fooy el segundo es bar.

Para pasar una cadena completa que contenga espacios en blanco como argumento único, escríbala entre comillas dobles:

echo "foo    bar"

imprimirá los cuatro espacios.

Dennis
fuente
En una nota al margen: me parece sorprendente que echo $TEMPLATEfuncione. También debería colapsar múltiples espacios en blanco.
Dennis
¡Si! Eso fue todo. Tiene mucho sentido, pero no me di cuenta de que este era el caso. Además, echo $TEMPLATEestaba funcionando porque tenía citas al respecto, pero olvidé copiarlo en mi publicación. No pensé que eso fuera importante. ¡Estaba equivocado!
Jeff
1
@Jeff Vea lo siguiente: Comandos y argumentos
slhck
1
@Jeff, es muy importante, al buscar ayuda, cortar y pegar en lugar de volver a escribir.
Glenn Jackman
@glennjackman, pensé que podría salir adelante con la reescritura ya que los guiones eran muy cortos y copiar + pegar sería un dolor ya que estaba trabajando en una terminal. estaba equivocado. lección aprendida. gracias por el consejo.
Jeff el