L'espace s'est effondré avec l'écho >>

10

Je crée un script qui lit le contenu d'un fichier, manipule le contenu et l'ajoute à un autre fichier (en particulier le fichier d'hôtes virtuels). Le formatage et les espaces dans le fichier de sortie sont importants mais lorsque j'écris le contenu, les espaces sont supprimés.

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

Donc le premier écho produit quelque chose comme

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

mais la chaîne qui pénètre dans le fichier est

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

Comment conserver l'espace blanc lors de l'ajout dans le fichier cible? J'ai cherché cela, mais toutes les questions similaires ne s'appliquent pas à mon script sans le réécrire.

Jeff
la source

Réponses:

9

Comme tout autre programme, echo interprète les chaînes séparées par des espaces comme différents arguments.

Après avoir appelé

echo foo    bar

les seules données transmises à echo par le shell sont que le premier argument est fooet le second l'est bar.

Pour passer une chaîne entière contenant des espaces blancs comme un seul argument, mettez-la entre guillemets:

echo "foo    bar"

imprimera les quatre espaces.

Dennis
la source
Soit dit en passant: je trouve surprenant que echo $TEMPLATEcela fonctionne. Il devrait également réduire plusieurs espaces blancs.
Dennis
Oui! C'était ça. C'est tout à fait logique, mais je ne savais pas que c'était le cas. De plus, echo $TEMPLATEça marchait parce que j'avais des citations mais je négligeais de les copier sur mon post. Je ne pensais pas que c'était important. J'avais tort!
Jeff
1
@Jeff Voir ce qui suit: Commandes et arguments
slhck
1
@Jeff, il est extrêmement important, lorsque vous demandez de l'aide, de couper et coller au lieu de retaper.
glenn jackman
@glennjackman, je pensais que je pourrais m'en tirer avec retaper car les scripts étaient si courts et copier + coller serait une douleur car je travaillais dans un terminal. J'avais tort. leçon apprise. Merci pour le conseil.
Jeff