ช่องว่างถูกยุบด้วยเสียงสะท้อน >>


10

ฉันกำลังสร้างสคริปต์ที่อ่านเนื้อหาของไฟล์จัดการเนื้อหาและผนวกเข้ากับไฟล์อื่น (โดยเฉพาะไฟล์โฮสต์เสมือน) การจัดรูปแบบและช่องว่างในไฟล์เอาต์พุตนั้นสำคัญ แต่เมื่อฉันเขียนเนื้อหาช่องว่างนั้นจะถูกตัดออก

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

เสียงก้องแรกสร้างบางอย่างเช่น

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

แต่สตริงที่เข้าสู่ไฟล์คือ

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

ฉันจะรักษาช่องว่างในขณะที่ต่อท้ายไฟล์เป้าหมายได้อย่างไร ฉันค้นหาสิ่งนี้ แต่คำถามที่คล้ายกันทั้งหมดไม่ได้นำไปใช้กับสคริปต์ของฉันโดยไม่ต้องเขียนใหม่

คำตอบ:


9

เหมือนกับทุก ๆ โปรแกรม echo ตีความสตริงที่คั่นด้วยช่องว่างเป็นอาร์กิวเมนต์ที่ต่างกัน

หลังจากโทรมา

echo foo    bar

ข้อมูลเท่านั้นที่ได้รับการส่งผ่านไปยังสะท้อนจากเปลือกเป็นว่าอาร์กิวเมนต์แรกคือและที่สองคือfoobar

หากต้องการส่งสตริงทั้งหมดที่มีช่องว่างเป็นอาร์กิวเมนต์เดียวให้ล้อมด้วยเครื่องหมายคำพูดคู่:

echo "foo    bar"

จะพิมพ์ทั้งสี่ช่องว่าง


สังเกตด้านบน: ฉันคิดว่ามันน่าแปลกใจที่echo $TEMPLATEจะทำงาน มันควรยุบช่องว่างหลายช่องด้วยเช่นกัน
Dennis

ใช่ นั่นมัน มันสมเหตุสมผลดี แต่ฉันก็ไม่รู้ว่ามันเป็นอย่างนั้น นอกจากนี้echo $TEMPLATEก็ใช้งานได้เพราะฉันมีเครื่องหมายคำพูดอยู่รอบ ๆ แต่ฉันไม่สนใจคัดลอกไปยังโพสต์ของฉันฉันไม่คิดว่ามันสำคัญ ฉันผิดไป!
Jeff


1
@ เจฟฟ์มันสำคัญมากเมื่อต้องการความช่วยเหลือในการตัดและวางแทนที่จะพิมพ์ซ้ำ
เกล็

@glennjackman ฉันคิดว่าฉันสามารถหลีกเลี่ยงการพิมพ์ซ้ำได้เนื่องจากสคริปต์นั้นสั้นมากและการคัดลอก + วางจะเป็นความเจ็บปวดตั้งแต่ฉันทำงานในเทอร์มินัล ฉันผิดไป. บทเรียน. ขอบคุณสำหรับทิป.
Jeff
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.