คำอธิบายที่ถูกต้องได้รับจากjsbillingsและgeekosaurแล้ว แต่ขอผมขยายอีกหน่อย
ในเชลล์ส่วนใหญ่รวมถึง bash แต่ละไพพ์ไลน์ทำงานในเชลล์ย่อยดังนั้นการเปลี่ยนแปลงใด ๆ ในสถานะภายในของเชลล์ (เช่นตัวแปรการตั้งค่า) จะยังคงอยู่ในเซ็กเมนต์ของไพพ์ไลน์ ข้อมูลเดียวที่คุณจะได้รับจาก subshell คือสิ่งที่มันส่งออก (ไปยังเอาต์พุตมาตรฐานและตัวอธิบายไฟล์อื่น ๆ ) และรหัสทางออก (ซึ่งเป็นตัวเลขระหว่าง 0 ถึง 255) ตัวอย่างเช่นตัวอย่างต่อไปนี้พิมพ์ 0:
a=0; a=1 | a=2; echo $a
ใน ksh (ตัวแปรที่ได้มาจากรหัส AT&T ไม่ใช่ตัวแปร pdksh / mksh) และ zsh รายการสุดท้ายในไพพ์ไลน์จะถูกดำเนินการในพาเรนต์เชลล์ (POSIX อนุญาตให้ทำงานทั้งสองอย่าง) ดังนั้นข้อมูลโค้ดด้านบนจะพิมพ์ 2
สำนวนที่มีประโยชน์คือการรวมความต่อเนื่องของ while loop (หรืออะไรก็ตามที่คุณมีอยู่ทางด้านขวามือของไปป์ไลน์ แต่ a while loop เป็นเรื่องธรรมดาจริงๆที่นี่) ในไพพ์ไลน์:
cat junk | {
while read var ; do x=55 ; done
echo x=$x
}