เพราะนั่นคือสิ่งที่มันควรจะเป็น
<(...)
in bash
คือไวยากรณ์สำหรับการทดแทนกระบวนการ ksh
ก็คัดลอกมาจากผู้ประกอบการเหมือนกันใน
<
, (
, )
, |
, &
, ;
กำลังราชสกุลศัพท์พิเศษในการbash
ที่จะใช้ในการประกอบการในรูปแบบพิเศษในชุดที่แตกต่างกัน <
, <(
, <<
, <&
... แต่ละคนมีบทบาทของพวกเขา <
สำหรับการเปลี่ยนเส้นทาง <file
, < file
จะเปลี่ยนเส้นทางการป้อนข้อมูลจากแฟ้ม <'(file)'
จะเปลี่ยนเส้นทางอินพุตจากไฟล์ที่เรียกว่า(file)
แต่<(file)
เป็นโอเปอเรเตอร์อื่นที่ไม่ใช่โอเปอเรเตอร์การเปลี่ยนเส้นทาง
< (file)
จะตามมาด้วย<
(file)
ในบริบทว่าในbash
, (file)
ไม่ถูกต้อง (...)
สามารถใช้ได้เป็นโทเค็นเดียวในบางบริบทเช่น:
(sub shell)
func () {
...
}
var=(foo bar)
แต่ไม่ใช่ค่ะ
sort < (cmd)
ในfish
เปลือกมันแตกต่างกัน ในfish
, (...)
สำหรับแทนคำสั่ง (เทียบเท่า$(...)
ในbash
) และ<
สำหรับการเปลี่ยนเส้นทางอินพุตเช่นในเชลล์คล้ายบอร์น
ดังนั้นในfish
:
sort <(echo file)
จะเหมือนกับ:
sort < (echo file)
นั่นคือ:
sort < file
แต่นั่นเป็นสิ่งที่แตกต่างจากbash
การทดแทนกระบวนการอย่างสิ้นเชิง
ในyash
เชลล์ POSIX เชลล์อื่น<(...)
ไม่ได้ใช้สำหรับการทดแทนกระบวนการแต่สำหรับการเปลี่ยนเส้นทางกระบวนการ
ในนั้น,
sort <(ls -l)
ย่อจาก:
sort 0<(ls -l)
เป็นผู้ดำเนินการเปลี่ยนเส้นทาง มันมากหรือน้อยเทียบเท่ากับ:
ls -l | sort
ขณะที่อยู่ในbash
นั้น<(ls -l)
จะถูกขยายไปยังเส้นทางของไปป์ดังนั้นมันจึงเป็นดังนี้:
ls -l | sort /dev/fd/0
ในzsh
นั้น(...)
มีการใช้งานมากเกินไปในฐานะผู้ดำเนินการ globbing ( (*.txt|*.png)
จะขยายไปยังtxt
และpng
ไฟล์) และเป็นตัวระบุ glob ( *(/)
ตัวอย่างเช่นขยายไปยังไฟล์ไดเรกทอรี)
ในzsh
ใน:
sort < (ls -l)
ที่(ls -l)
จะถือว่าเป็นรอบคัดเลือก ตัวระบุแบบl
กลมคือจับคู่กับจำนวนลิงก์และคาดว่าจะมีตัวเลขหลังจากนั้นl
(ตามที่ls -ld ./*(l2)
จะแสดงรายการไฟล์ที่มี 2 ลิงก์) ดังนั้นนั่นคือสาเหตุที่คุณได้รับzsh: number expected
ข้อผิดพลาดที่นั่น
sort < (w)
จะได้รับzsh: no matches found: (w)
ข้อผิดพลาดแทน(w)
ตรงกับไฟล์ที่มีชื่อว่างที่สามารถเขียนได้
sort < (w|cat)
จะมีการเรียงลำดับเนื้อหาของw
และ / หรือcat
ไฟล์ในไดเรกทอรีปัจจุบัน ...