Boşluk yankı ile çöktü >>


10

Bir dosyanın içeriğini okuyan, içeriği işleyen ve başka bir dosyaya (özellikle sanal ana bilgisayarlar dosyası) ekleyen bir komut dosyası oluşturuyorum. Çıktı dosyasındaki biçimlendirme ve boşluk önemlidir, ancak içeriği yazdığımda boşluk çıkarılır.

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

İlk yankı şöyle bir şey üretir:

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

ancak dosyaya giren dize

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

Hedef dosyaya eklerken boşlukları nasıl koruyabilirim? Bunu aradım ama tüm benzer sorular senaryoyu yeniden yazmadan geçerli değil.

Yanıtlar:


9

Diğer tüm programlar gibi, echo boşlukla ayrılmış dizeleri farklı argümanlar olarak yorumlar.

Aradıktan sonra

echo foo    bar

kabuk tarafından yankıya aktarılan tek veri ilk argümanın foove ikincisinin olmasıdır bar.

Beyaz boşluk içeren bir dizenin tamamını tek bir argüman olarak iletmek için dizeyi çift tırnak içine alın:

echo "foo    bar"

dört boşluğu da yazdırır.


Bir yan not: Bunun echo $TEMPLATEişe yarayacağını şaşırtıcı buluyorum . Birden fazla beyaz alanı da daraltmalıdır.
Dennis

Evet! Öyleydi. Tam mantıklı ama durumun bu olduğunu fark etmedim. Ayrıca, echo $TEMPLATEetrafında tırnak vardı çünkü çalışıyordu ama benim yazı üzerine kopyalamak için ihmal. Bunun önemli olduğunu düşünmüyordu. Ben hatalıydım!
Jeff

1
@Jeff Aşağıdakilere bakın: Komutlar ve Bağımsız Değişkenler
slhck

1
@ Jeff, yardım ararken yeniden yazmak yerine kesmek ve yapıştırmak çok önemlidir.
glenn jackman

@glennjackman ben komut dosyaları çok kısa ve ben bir terminalde çalıştığı için kopya + macun bir ağrı olacağını çünkü ben yeniden yazma ile kurtulmak düşündüm. ben hatalıydım. ders öğrenildi. Bahşiş için teşekkürler.
Jeff
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.