เชลล์สคริปต์สะท้อนบรรทัดใหม่ไปยังไฟล์


26

ฉันต้องการ echo บรรทัดใหม่ไปยังไฟล์ระหว่างตัวแปรในเชลล์สคริปต์ นี่คือรหัสของฉัน:

var1 = "ฮัลโหล"
var2 = "โลก!"
logwrite = "$ var1 [ที่นี่ฉันต้องการแทรกบรรทัดใหม่] $ var2
echo "$ logwrite" >> /Users/username/Desktop/user.txt

ตอนนี้เมื่อฉันเรียกใช้สคริปต์ของฉันไฟล์ user.txt แสดงสิ่งนี้:

สวัสดีชาวโลก!

ฉันต้องการให้มันแสดง:

สวัสดี
โลก!

ฉันจะทำสิ่งนี้ได้อย่างไร ??

แก้ไข: นี่คือเปลือกสคริปต์ของฉัน:

echo -n "ชื่อแรกของคุณคืออะไร"
อ่านก่อน
echo -n "นามสกุลของคุณคืออะไร"
อ่านล่าสุด
echo -n "ชื่อกลางของคุณคืออะไร"
อ่านตรงกลาง
echo -n "วันเกิดของคุณคืออะไร"
อ่านวันเกิด
echo -e "ชื่อจริง: $ First / nLast ชื่อ: $ last / nMiddle ชื่อ: $ middle / n วันเกิด: $ Birthday" >> /Users/matthewdavies/Desktop/user.txt
qlmanage -p "~ / Desktop / user.txt"

1
คุณต้องการสร้างตัวแปร "logwrite" นี้หรือไม่? เขียนได้printf "%s\n" $var1 $var2 >> fileไหม
เกล็นแจ็คแมน

ไม่ฉันไม่ต้องการและในสคริปต์ที่ได้รับการแก้ไขซึ่งฉันทำงานอยู่ฉันไม่ได้ใช้ตัวแปร $ logwrite ขอบคุณ
daviesgeek

คำตอบ:


32
var1="Hello"
var2="World!"
logwrite="$var1\n$var2"
echo -e "$logwrite"  >> /Users/username/Desktop/user.txt

คำอธิบาย:

\nลำดับหนีบ่งชี้ว่าฟีดบรรทัด การส่งผ่าน-eอาร์กิวเมนต์เพื่อให้เสียงสะท้อนช่วยให้สามารถตีความลำดับ escape ได้

มันอาจจะง่ายขึ้นอีก:

var1="Hello"
var2="World!"
echo -e "$var1\n$var2"  >> /Users/username/Desktop/user.txt

หรือแม้กระทั่ง:

echo -e "Hello\nWorld! "  >> /Users/username/Desktop/user.txt

ตัวอย่างของคุณใช้งานได้ แต่เมื่อฉันรวมไว้ในรหัสของฉันมันไม่ทำงาน ฉันจะแก้ไขโพสต์และเพิ่มสคริปต์ของฉัน
daviesgeek

1
@ บันทึกดูเหมือนว่าคุณกำลังใช้เครื่องหมายทับผิดกับลำดับการหลบหนี \nแทน/nควรทำเคล็ดลับ :)
จอห์นที

ที่แก้ไขมัน (ใช้ \ n แทน / n ขอบคุณมาก !!
daviesgeek

@ โปรดเป็นมากกว่าการต้อนรับ :)
John T

บน AIX ในสคริปต์ KSH ฉันไม่ต้องการ-eแฟล็ก
javaPlease42

5
var1='Hello'
var2='World!'
echo "$var1" >> /Users/username/Desktop/user.txt
echo "$var2" >> /Users/username/Desktop/user.txt

หรือจริง ๆ แล้วคุณไม่จำเป็นต้องมี vars:

echo 'Hello' >> /Users/username/Desktop/user.txt
echo 'World!' >> /Users/username/Desktop/user.txt

มีปัญหากับคำตอบ john t: หากมี vars ใดมีสตริง \ n (หรือลำดับอื่นเช่น \ t) พวกเขาจะได้รับการแปล อย่างใดอย่างหนึ่งสามารถรับคล้ายกับคำตอบของเขาด้วย printf:

printf '%s\n%s\n' 'Hello' 'World!'

ยังอืม ฉันเห็นว่าคุณกำลังเขียนคำตอบลงในตัวแปร $ logwrite หากนี่เป็นการใช้ตัวแปรนี้เพียงอย่างเดียวก็ดูเหมือนว่าไม่มีประโยชน์

ฉันคิดว่าเอกสารที่นี่สามารถอ่านได้มากขึ้นโดยเฉพาะถ้าคุณมีสายจำนวนมากเพื่อผนวกเข้าสู่บันทึก:

cat >> /Users/username/Desktop/user.txt <<EOF
Hello
World
EOF

(คำนี้ EOF เป็นตัวคั่นที่คุณสามารถเลือกได้มันอาจเป็นคำใดก็ได้)

ระวังว่า heredoc จะขยาย $ ตัวแปรเช่นอัญประกาศ ถ้าคุณไม่ต้องการสิ่งนี้คุณอ้าง heredoc เช่น << "EOF"


สิ่งที่ไม่มี vars มี\nดังนั้นทำไมฉันให้คำตอบ วิธีการ "จะเกิดอะไรขึ้นถ้า" จะทำให้ทุกคำถามในเว็บไซต์นี้เป็นการอภิปรายที่ไม่รู้จบ เมื่อเขามาถึงถนนว่าเขาสามารถถามคำถามอื่น :)
จอห์นที

@elias ตัวแปร $ logwrite เป็นส่วนที่เหลือจากการแก้ไขของฉันในสคริปต์เมื่อฉันทำการเปลี่ยนแปลง ฉันเอา $ logwrite var ออกจากรหัสของฉัน คำตอบของ John T. ใช้งานได้จริง ขอบคุณมาก!
daviesgeek

printfใช่ใช้ มันเป็น POSIX: stackoverflow.com/a/34947759/895245
Ciro Santilli 中心改造中心 996ICU 六四事件
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.