Ruang kosong diciutkan dengan gema >>

10

Saya membuat skrip yang membaca konten file, memanipulasi konten dan menambahkan ke file lain (khususnya file host virtual). Pemformatan dan spasi putih dalam file output penting tetapi ketika saya menulis konten, spasi kosong dihapus.

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

Jadi gema pertama menghasilkan sesuatu seperti

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

tetapi string yang masuk ke file adalah

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

Bagaimana cara mempertahankan spasi putih saat menambahkan ke file target? Saya telah mencari ini tetapi semua pertanyaan serupa tidak berlaku untuk skrip saya tanpa menulis ulang.

Jeff
sumber

Jawaban:

9

Seperti setiap program lainnya, gema menafsirkan string yang dipisahkan oleh spasi sebagai argumen yang berbeda.

Setelah menelepon

echo foo    bar

satu-satunya data yang diteruskan ke gema oleh shell adalah bahwa argumen pertama adalah foodan yang kedua adalah bar.

Untuk meneruskan seluruh string yang berisi spasi putih sebagai argumen tunggal, lampirkan dalam tanda kutip ganda:

echo "foo    bar"

akan mencetak keempat ruang.

Dennis
sumber
Di samping catatan: Saya merasa mengejutkan bahwa itu echo $TEMPLATEakan berhasil. Itu harus runtuh beberapa spasi putih juga.
Dennis
Iya! Itu dia. Masuk akal sepenuhnya, tetapi saya tidak menyadari ini adalah masalahnya. Juga, echo $TEMPLATEberfungsi karena saya mempunyai tanda kutip di sekitarnya tetapi saya lalai untuk menyalinnya ke posting saya. Saya tidak berpikir itu penting. Saya salah!
Jeff
1
@Jeff Lihat yang berikut: Perintah dan Argumen
slhck
1
@ Jeff, ini sangat penting, ketika mencari bantuan, untuk memotong dan menempel bukan mengetik ulang.
glenn jackman
@glennjackman saya pikir saya bisa lolos dengan mengetik ulang karena skripnya begitu pendek dan salin + tempel akan menyebalkan karena saya bekerja di terminal. saya salah. pelajaran yang dipetik. terima kasih atas tipnya.
Jeff