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.

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.