bash
เรียกใช้ทางด้านขวามือของไปป์ไลน์ในบริบทของเชลล์ย่อยดังนั้นการเปลี่ยนแปลงตัวแปร (ซึ่งเป็นสิ่งที่read
ทำ) จะไม่ได้รับการเก็บรักษาไว้ - พวกมันจะตายเมื่อ subshell ทำในตอนท้ายของคำสั่ง
แต่คุณสามารถใช้การทดแทนกระบวนการได้ :
$ read a b dump < <(echo 1 2 3 4 5)
$ echo $b $a
2 1
ในกรณีread
นี้ทำงานอยู่ภายในเชลล์หลักของเราและคำสั่งที่สร้างเอาต์พุตของเราจะทำงานในเชลล์ย่อย <(...)
ไวยากรณ์สร้าง subshell และเชื่อมต่อการส่งออกไปยังท่อซึ่งเราเปลี่ยนเส้นทางลงในการป้อนข้อมูลของread
กับสามัญการดำเนินงาน<
เนื่องจากread
วิ่งในเปลือกหลักของเราตัวแปรจึงตั้งค่าไว้อย่างถูกต้อง
ตามที่ระบุไว้ในความคิดเห็นหากเป้าหมายของคุณคือการแยกสตริงเป็นตัวแปรอย่างใดคุณสามารถใช้สตริงที่นี่ :
read a b dump <<<"1 2 3 4 5"
ฉันคิดว่ามีมากกว่านั้น แต่นี่เป็นตัวเลือกที่ดีกว่าถ้าไม่มี