เพราะนั่นเป็นคุณสมบัติของเชลล์ (ของ ksh, คัดลอกโดย bash) และเชลล์เท่านั้น
/dev/tcp/...ไม่ใช่ไฟล์จริงเชลล์สกัดกั้นความพยายามในการเปลี่ยนเส้นทางไปยัง/dev/tcp/...ไฟล์จากนั้นทำการsocket(...);connect(...)(ทำการเชื่อมต่อ TCP) แทนการopen("/dev/tcp/..."...)(เปิดไฟล์นั้น) ในกรณีนั้น
โปรดทราบว่าจะต้องมีการสะกดเช่นนั้น cat < /dev/./tcp/...หรือ///dev/tcp/...ไม่ทำงานและจะพยายามเปิดไฟล์เหล่านั้นแทน (ซึ่งในระบบส่วนใหญ่ไม่มีอยู่และคุณจะได้รับข้อผิดพลาด)
ทิศทางของการเปลี่ยนเส้นทางก็ไม่สำคัญเช่นกัน ไม่ว่าคุณจะใช้3< /dev/tcp/...หรือ3> /dev/tcp/...หรือ3<> /dev/tcp/...หรือ3>> /dev/tcp/...จะไม่สร้างความแตกต่างใด ๆ ก็ตามคุณจะสามารถอ่านและเขียนจาก / ถึงตัวอธิบายไฟล์นั้นเพื่อรับ / ส่งข้อมูลผ่านซ็อกเก็ต TCP นั้น
เมื่อคุณทำเช่นcat /dev/tcp/...นั้นจะไม่ทำงานเพราะcatไม่ได้ใช้การจัดการพิเศษแบบเดียวกันมันไม่open("/dev/tcp/...")เหมือนกับไฟล์ทุกไฟล์ (ยกเว้น-) เฉพาะเชลล์ (ksh, bash เท่านั้น) เท่านั้นและสำหรับเป้าหมายของการเปลี่ยนเส้นทางเท่านั้น
นั่นcat -เป็นอีกตัวอย่างหนึ่งของพา ธ ไฟล์ที่จัดการเป็นพิเศษ แทนที่จะopen("-")อ่านa จะอ่านโดยตรงจาก file descriptor 0 (stdin) catและยูทิลิตี้ข้อความจำนวนมากทำเช่นนั้นเชลล์ไม่ได้ใช้เปลี่ยนเส้นทาง หากต้องการอ่านเนื้อหาของ-ไฟล์คุณต้องcat ./-หรือcat < -(หรือcat - < -) ในระบบที่ไม่ได้มี/dev/stdin, bashแต่จะทำบางสิ่งบางอย่างที่คล้ายกันสำหรับการเปลี่ยนเส้นทางจากที่ (เสมือน) ไฟล์ GNU awkไม่เหมือนกันสำหรับ/dev/stdin, /dev/stdout, /dev/stderrแม้ในระบบที่มีไฟล์ดังกล่าวซึ่งอาจทำให้เกิดความผิดบางประการเกี่ยวกับระบบเช่นลินุกซ์ที่ไฟล์เหล่านั้นทำงานแตกต่างกัน
zshนอกจากนี้ยังมีการรองรับซ็อกเก็ต TCP (และโดเมน Unix) แต่ก็ทำด้วยztcp(และzsocket) builtins ดังนั้นจึงมีข้อ จำกัด น้อยกว่าวิธี ksh / bash โดยเฉพาะอย่างยิ่งมันสามารถทำหน้าที่เป็นเซิร์ฟเวอร์ที่ ksh / bash ไม่สามารถทำได้ มันยังมีข้อ จำกัด มากกว่าสิ่งที่คุณสามารถทำได้ในภาษาการเขียนโปรแกรมจริง