Carriage return ด้วยคำสั่ง echo


9

ฉันกำลังฝึกคำสั่ง echo พร้อมตัวเลือก\r(carriage return) ดังต่อไปนี้

echo -e "This is \r my college"

เอาท์พุท:

 my college

แต่เมื่อฉันเพิ่มอีกหนึ่งคำก่อนหน้า\rนี้เป็นด้านล่าง

echo -e "This is the \r my college"

จากนั้นให้ฉันเอาท์พุทเช่น:

 my college the

ตัวอย่างอื่น

echo -e "This is \r valid data"
 valid data

echo -e "This is not a \r valid data"
 valid data a

ดังนั้นฉันอยากรู้ว่าจุดประสงค์ที่แท้จริงของการรับคืนคืออะไร


สิ่งนี้ไม่สามารถทำซ้ำได้ คำสั่งที่สองส่งผลให้เกิดผลลัพธ์␣my collegeเช่นเดียวกับคำสั่งแรก
Kusalananda

3
echo -eunportable อย่างฉาวโฉ่ คุณอาจใช้ shoud printfแทน
tripleee

ที่เกี่ยวข้อง: unix.stackexchange.com/questions/355559/…
George Vasiliou

คำตอบ:


20

\rเป็นเพียงว่าเป็น "กลับสายการบิน" - ไม่มีอะไรอื่น นี่หมายถึงสิ่งที่จะเกิดขึ้นหลังจากที่\rเขียนทับจุดเริ่มต้นของสิ่งที่พิมพ์ไปแล้ว

ตัวอย่างเช่น:

echo -e "1234\r56"

จะแสดง:

5634

echoได้พิมพ์1234กลับหายไปจากนั้นไปที่จุดเริ่มต้นของบรรทัดและพิมพ์กว่าด้านบนของ5612

สำหรับบรรทัดใหม่ลอง\nแทน ไม่จำเป็นต้องเว้นวรรคด้วย ตัวอย่างเช่น:

echo -e "This is\nmy college"

ซึ่งจะส่งออก:

This is
my college

การคืนสินค้าเป็นประโยชน์สำหรับสิ่งต่าง ๆ ดังนี้:

#!/bin/sh
i=0
while [ $i -lt 3 ]
do
    echo -ne "\r"`date` #you should remove new line too
    sleep 1
    i=$(($i + 1))
done
exit

ซึ่งจะแสดงdateเหนือส่วนบนของตัวเองแทนที่จะสร้างบรรทัดใหม่หลังจากแต่ละวง


1
carriage return นั้นยังใช้ใน sysvinit ที่มีให้ ยกตัวอย่างเช่นฟังก์ชั่นจากecho_success /etc/init.d/functions
เทรเวอร์บอยด์สมิ ธ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.