9 votes

Les espaces blancs sont réduits avec echo >>

Je suis en train de créer un script qui lit le contenu d'un fichier, manipule le contenu et l'ajoute à un autre fichier (en l'occurrence le fichier des hôtes virtuels). La mise en forme et les espaces vides dans le fichier de sortie sont importants mais lorsque j'écris le contenu, les espaces vides sont supprimés.

VHOST_PATH="/etc/apache2/extra/httpd-vhosts.conf"
TEMPLATE_PATH="./template.conf"
TEMPLATE=$(> $VHOST_PATH    #ne produit pas les espaces corrects

Ainsi, le premier echo produit quelque chose comme

    ServerAdmin webmaster@domain
    DocumentRoot "root/web"
    ServerName domain
    ErrorLog "root/logs/error_log"

mais la chaîne qui est écrite dans le fichier est

 ServerAdmin webmaster@domain DocumentRoot "root/web" ServerName domain ErrorLog "root/logs/error_log" 

Comment puis-je conserver les espaces vides tout en ajoutant au fichier cible? J'ai recherché cela mais toutes les questions similaires ne s'appliquent pas à mon script sans le réécrire.

8voto

Dennis Points 46916

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

Après avoir appelé

echo foo    bar

les seules données transmises à echo par le shell sont que le premier argument est foo et le second est bar.

Pour passer une chaîne entière contenant des espaces comme un seul argument, l'encadrer de guillemets doubles :

echo "foo    bar"

affichera tous les quatre espaces.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X