อะไรคือความแตกต่างระหว่าง“>” และ“ >>”?


12

ความแตกต่างระหว่างls >และls >>คืออะไร? ฉันต้องเข้าใจสิ่งนี้สำหรับการคำนวณ GCSE ของฉัน แต่ไม่รู้ว่าอะไรแตกต่างกัน


1
นอกเหนือจากคำตอบที่ดีด้านล่างโปรดดูคำตอบที่ 2 (และ upvoted มากที่สุด) บน stackoverflow.com/a/984761/1841533: การใช้ >> เพื่อเขียนไปยังไฟล์ (เช่น: บันทึก) มีผลข้างเคียงที่ดีต่อ ไม่มีตัวอักษร "Nul" ปรากฏที่จุดเริ่มต้นของไฟล์ saif หากไฟล์ถูกตัดทอนในขณะที่กระบวนการยังคงเขียนอยู่! (เช่น: ระหว่างการหมุนเวียนไฟล์บันทึก) เนื่องจาก "foo> file" ไม่ค้นหาจึงไม่สังเกตเห็นการเปลี่ยนแปลงขนาดและยังคงให้คะแนนมากกว่าจุดเริ่มต้นโฆษณาเติม OS ด้วย Nul foo >> ไฟล์พยายามค้นหาและชี้ไปที่ตำแหน่งใหม่ (จุดเริ่มต้น)
Olivier Dulac

เนื่องจากนี่เป็นคำถามเพื่อการศึกษาฉันขอแนะนำให้คุณเรียนรู้ที่จะทำงานกับเอกสารที่เกี่ยวข้อง: คู่มืออ้างอิง Bash ส่วน“ การเปลี่ยนเส้นทาง” (เข้าถึงได้ผ่านทางman bash)
David Foerster

คำตอบ:


28

>& >>เป็นผู้ดำเนินการเปลี่ยนเส้นทาง พวกเขาถ่ายโอนเอาท์พุทของบางอย่างในกรณีนี้lsที่อื่น หากผลลัพธ์นี้ไปที่ไฟล์>จะตัดไฟล์ - เช่นลบเนื้อหาก่อนหน้าใด ๆ ในขณะที่>>จะผนวกข้อมูลใหม่เข้าที่ท้ายไฟล์โดยคงเนื้อหาเดิมไว้ สิ่งนี้จะทำงานกับอินพุตใดก็ได้ตัวอย่างเช่นecho& catสามารถใช้วิธีนี้ได้เช่นกัน

อีกอย่างที่น่าสนใจคือ|โอเปอเรเตอร์ซึ่งส่งผ่านข้อมูลไปยังแอปพลิเคชั่นอื่น - ดังนั้นls | cat -nจะให้รายชื่อที่มีหมายเลขบรรทัด!

ท่อเป็นคำที่เกี่ยวข้อง


2
ตัดหรือเขียนทับหรือไม่
DK Bose

2
@DKBose จากstraceผลลัพธ์สำหรับbash -c 'echo a > blah': open("blah, O_WRONLY|O_CREAT|O_TRUNC, 0666)ดังนั้น truncate จึงเป็นคำที่ถูกต้อง
muru

"pipes" และ "การเปลี่ยนเส้นทางเอาต์พุต" ซึ่งคุณเรียงลำดับการใช้ในคำตอบของคุณ ทำได้ดี.
0xSheepdog

พบสิ่งที่ฉันหมายถึง: นอกจากคำตอบที่ดีนี้โปรดดูคำตอบที่ 2 (และ upvoted มากที่สุด) บนstackoverflow.com/a/984761/1841533 : การใช้>>เพื่อเขียนไปยังไฟล์ (เช่น: บันทึก) ยังมีด้านดี เอฟเฟกต์ที่จะไม่มีตัวอักษร "Nul" ปรากฏที่จุดเริ่มต้นของไฟล์ saif หากไฟล์ถูกตัดทอนในขณะที่กระบวนการยังคงเขียนอยู่! (เช่น: ระหว่างการหมุนเวียนไฟล์บันทึก) เนื่องจาก "foo> file" ไม่ค้นหาจึงไม่สังเกตเห็นการเปลี่ยนแปลงขนาดและยังคงให้คะแนนมากกว่าจุดเริ่มต้นโฆษณาเติม OS ด้วย Nul foo >>fileแสวงหาและชี้ไปที่ตำแหน่งใหม่ (จุดเริ่มต้น)
Olivier Dulac

5

สัญลักษณ์>และ>>ใช้เพื่อเปลี่ยนทิศทางเอาต์พุตไปยังไฟล์

ทั้งสองจะสร้างไฟล์หากไม่มีไฟล์ หากไฟล์มีอยู่แล้ว>จะเขียนทับไฟล์ที่>>จะผนวกข้อมูลไปยังไฟล์

ดังนั้นls > myfileจะสร้างเอกสารชื่อmyfileหากไม่มีอยู่ หากmyfileมีอยู่แล้วและมีข้อมูลบางส่วนข้อมูลนั้นจะถูกเขียนทับด้วยข้อมูลใหม่ที่คุณส่งผ่าน

ในขณะที่ls >> myfileจะสร้างไฟล์หากไม่มีอยู่และเขียนข้อมูลลงไป หากไฟล์นั้นมีอยู่กับข้อมูลบางส่วนข้อมูลใหม่จะถูกเพิ่มไปยังจุดสิ้นสุด


0

หากคุณใช้ตัวเดียว> มันจะทำการเขียนทับไฟล์ถ้ามันมีอยู่แล้ว ระวังให้มากเมื่อคุณใช้อันนี้

หากคุณใช้สอง >> มันจะต่อท้าย (หรืออีกนัยหนึ่งเริ่มเขียนที่ด้านล่างของไฟล์) หากมีอยู่แล้ว มิฉะนั้นจะสร้างไฟล์ใหม่หากไม่มีอยู่


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