Leerzeichen werden mit Echo >> reduziert


10

Ich erstelle ein Skript, das den Inhalt einer Datei liest, den Inhalt bearbeitet und an eine andere Datei anhängt (insbesondere die Datei für virtuelle Hosts). Die Formatierung und das Leerzeichen in der Ausgabedatei sind wichtig, aber wenn ich den Inhalt schreibe, wird das Leerzeichen entfernt.

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

Das erste Echo erzeugt also so etwas wie

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

aber die Zeichenfolge, die in die Datei gelangt, ist

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

Wie behalte ich das Leerzeichen beim Anhängen an die Zieldatei bei? Ich habe danach gesucht, aber all die ähnlichen Fragen gelten nicht für mein Skript, ohne es neu zu schreiben.

Antworten:


9

Wie jedes andere Programm interpretiert echo durch Leerzeichen getrennte Zeichenfolgen als unterschiedliche Argumente.

Nach dem Anruf

echo foo    bar

Die einzigen Daten, die von der Shell an das Echo übergeben werden, sind das erste foound das zweite Argument bar.

Um eine ganze Zeichenfolge mit Leerzeichen als einzelnes Argument zu übergeben, schließen Sie sie in doppelte Anführungszeichen ein:

echo "foo    bar"

druckt alle vier Leerzeichen.


Nebenbei bemerkt: Ich finde es überraschend, dass echo $TEMPLATEdas funktionieren würde. Es sollte auch mehrere Leerzeichen kollabieren.
Dennis

Ja! Das war's. Es macht durchaus Sinn, aber ich wusste nicht, dass dies der Fall ist. Funktionierte auch, echo $TEMPLATEweil ich Zitate hatte, aber ich habe es versäumt, es in meinen Beitrag zu kopieren. Ich fand das nicht wichtig. Ich lag falsch!
Jeff

1
@ Jeff Siehe die folgenden: Befehle und Argumente
slhck

1
@ Jeff, es ist von entscheidender Bedeutung, wenn Sie Hilfe suchen, auszuschneiden und einzufügen, anstatt sie erneut einzugeben.
Glenn Jackman

@glennjackman Ich dachte, ich könnte mit dem erneuten Tippen davonkommen, da die Skripte so kurz waren und Kopieren + Einfügen ein Schmerz wäre, da ich in einem Terminal arbeitete. Ich lag falsch. Lektion gelernt. Danke für den Tipp.
Jeff
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.