หมายเหตุนี่คือคำตอบ bash ไม่ใช่ zsh
มีหลายกรณีที่ทุบตีซึ่งคุณไม่สามารถใช้ไพพ์ได้:
some_command | some_other_command
เนื่องจากท่อแนะนำ subshells สำหรับแต่ละองค์ประกอบของไปป์ไลน์เมื่อ subshells ออกผลข้างเคียงใด ๆ ที่คุณพึ่งพาจะหายไป ตัวอย่างเช่นตัวอย่างที่วางแผนไว้นี้:
cat file | while read line; do ((count++)); done
echo $count
จะแสดงบรรทัดว่างเนื่องจาก$count
ตัวแปรไม่มีอยู่ในเชลล์ปัจจุบัน
การทดแทนกระบวนการทุบตีช่วยให้คุณหลีกเลี่ยงปริศนานี้โดยอนุญาตให้คุณอ่านจากเอาต์พุต "some_command" ตามที่คุณต้องการจากไฟล์
while read line; do ((count++)); done < <(cat file)
# ....................................1.2
echo $count # the variable *does* exist in the current shell
(1) เป็นการเปลี่ยนเส้นทางอินพุตปกติ (2) เป็นการเริ่มต้นของ<()
ไวยากรณ์การแทนที่กระบวนการ
pfctl -f <(echo "pf rules")
พูดตัวอธิบายไฟล์ไม่ดี ใช้ zsh และ = (echo "pf rules") แทนใช้งานได้