อ้างจากเรย์มอนด์โดย @jasonwryan มีข้อมูลที่เป็นประโยชน์บางอย่าง แต่จะเริ่มต้นในช่วงกลางของเรื่อง:
- โปรดทราบว่า Unix เริ่มต้นเป็นรุ่น Multic ที่มีขอบเขตลดลงและตลอดประวัติศาสตร์คุณลักษณะใน Unix มักจะเลียนแบบหรือดัดแปลงคุณสมบัติที่เห็นและใช้กับระบบอื่น ๆ
'-'
ตัวละครตัวเลือกที่ถูกใช้ใน Multics Bitsavers มีคู่มือของคำสั่งของผู้ใช้
- ระบบอื่น ๆ ใช้อักขระที่แตกต่างกันบางตัวมีการอ้างสิทธิ์มากกว่าว่าจะมีการกดแป้นพิมพ์ที่มีประสิทธิภาพมากกว่า (เช่น
'/'
ใช้สำหรับ TOPS และ VMS) และบางส่วนน้อยกว่า (เช่น'('
ใช้ใน VM / SP CMS)
- ตัวเลือก Multics เป็นอักขระหลายตัวเช่นคำหลักคั่นด้วยเครื่องหมายขีดล่าง
- ตัวเลือก Multic ที่ยาวกว่ามักจะมีรูปแบบที่สั้นกว่าเช่นตัวย่อ(
-print
vs -pr
3-8)
- ตัวเลือกระบบปฏิบัติการยูนิกซ์เป็นตัวเดียวและหลังจากหลายปีที่ผ่านมา
getopt
ได้รับการแนะนำ เพราะมันไม่ได้เป็นส่วนหนึ่งของ Unix ดั้งเดิมมีสาธารณูปโภคที่ไม่ได้ใช้getopt
และถูกทิ้งให้เป็น - แต่ต้องgetopt
ช่วยกันทำโปรแกรมให้สอดคล้องกัน
ในทางกลับกันตัวเลือก Unix ที่ใช้getopt
คืออักขระเดี่ยว ระบบอื่น ๆ โดยเฉพาะคำหลักที่ใหญ่กว่าทั้งหมดใช้คำหลัก บางคำ (ไม่ใช่ทั้งหมด) อนุญาตให้คำหลักเหล่านั้นย่อได้นั่นคือไม่ใช่อักขระทั้งหมดที่มีให้ตราบใดที่ตัวเลือกนั้นไม่คลุมเครือ มีข้อผิดพลาดในการทดสอบความกำกวมนั้น ตัวอย่างเช่น:
- ในช่วงต้นปี 1985 ผมทำงานในโปรแกรมที่จะต้องมีการแจ้งความไปยังPrimos นักพัฒนาของ Prime ทำการแข่งขันกับ บริษัท อื่น ๆ โดยเสนอคำสั่งภาษาที่พยายามเลียนแบบของแต่ละ บริษัท โดยใช้คำสั่งที่ใช้บ่อยที่สุดจากแต่ละ บริษัท แน่นอนพวกเขาสนับสนุนตัวย่อ (เช่นเดียวกับ VMS) หลังจากที่ได้อ่านความช่วยเหลือออนไลน์ผมพิมพ์คิดที่จะได้รับ
sta
status
นั่นคือตัวย่อสำหรับstart
และเมื่อไม่ได้ให้อะไรเลยเริ่มต้นล่ามคำสั่งจะนำฉันออก
- X Toolkit (ใช้โดยxterm ) อนุญาตให้ใช้ตัวเลือกแบบย่อ หากต้องการใช้สิ่งนี้อย่างมีประสิทธิภาพใน xterm จะต้องทำการประมวลผลพารามิเตอร์คำสั่งล่วงหน้าเพื่อเลือก
-v
(สำหรับเวอร์ชั่น) เหนือ-vb
(visual bell) X Toolkit ไม่มีวิธีโดยตรงในการระบุตัวเลือกที่ต้องการเมื่อมีความกำกวม
เนื่องจากศักยภาพที่คลุมเครือนี้นักพัฒนาบางคนจึงไม่อนุญาตให้ใช้ตัวย่อ Lynxเช่นใช้ตัวเลือกหลายตัวอักษรโดยไม่อนุญาตให้ใช้ตัวย่อ
ไม่ใช่ทุกโปรแกรมที่ใช้getopt
: tar
และps
ไม่ได้ ไม่เช่นนั้นrcs
(หรือsccs
) อย่างที่คุณเห็นโดยการสังเกตว่าเส้นประเป็นทางเลือกและค่าตัวเลือกนั้นเป็นตัวเลือก
เมื่อคำนึงถึงสิ่งเหล่านี้แล้วนักพัฒนา GNU ได้ปรับตัวเลือกคำหลักที่ใช้ในระบบอื่น ๆ โดยการขยายgetopt
เพื่อให้ตัวเลือกแบบสั้นแต่ละแบบมีความยาว ตัวอย่างเช่น textutils 1.0 changelog พูดว่า
Tue May 8 03:41:42 1990 David J. MacKenzie (djm at abyss)
* tac.c: Use regular expressions as the record boundaries.
Give better error messages.
Reformat code and make it more readable.
(main): Use getopt_long to parse options.
การเปลี่ยนแปลงใน fileutils ก่อนหน้านี้:
Tue Oct 31 02:03:32 1989 David J. MacKenzie (djm at spiff)
* ls.c (decode_switches): Add long options, using getopt_long
instead of getopt.
และบางคนอาจพบใครคนหนึ่งที่ยังก่อนหน้านี้ แต่ดูเหมือนว่าส่วนหัวของไฟล์จะแสดงวันที่ที่เร็วที่สุด:
/* Getopt for GNU.
Copyright (C) 1987, 1989 Free Software Foundation, Inc.
ซึ่งเป็น (ตัวอย่าง) พร้อมกันกับ X Toolkit (1987) ยูทิลิตี Unix ส่วนใหญ่ที่คุณคุ้นเคย (เช่นls
, ps
) ใช้ตัวเลือกอักขระเดียวที่มีอยู่ที่ต้องมีการเยี่ยมชมคู่มือเป็นระยะ เมื่อแนะนำgetopt_long
นักพัฒนา GNU ไม่ได้ทำเช่นนี้โดยครั้งแรกการเพิ่มตัวเลือกใหม่ พวกเขาเริ่มต้นด้วยการทำเป็นตารางตัวเลือกที่มีอยู่และให้ตัวเลือกการจับคู่ยาว
เนื่องจากพวกเขาเพิ่มไปยังรายการเพลงที่มีอยู่มี (อีกครั้ง) ปัญหาความขัดแย้งกับตัวเลือกที่มีอยู่ เพื่อหลีกเลี่ยงปัญหานี้พวกเขาได้เปลี่ยนรูปแบบการใช้สองขีดกลางหน้าตัวเลือกยาว
โปรแกรมเหล่านี้ยังคงใช้งานgetopt_long
ในลักษณะนี้ด้วยเหตุผลปกติ:
- สคริปต์ขึ้นอยู่กับตัวเลือก; นักพัฒนาไม่กังวลที่จะทำลายสคริปต์
- มีมาตรฐานการเขียนเป็นลายลักษณ์อักษร(ซึ่งอาจมีประสิทธิภาพ)
- ไม่มีใครคิดเครื่องมือที่แข่งขันกันซึ่งเข้ากันไม่ได้ (ทั้งนักพัฒนา BSD และ GNU คัดลอกชื่อตัวเลือกจากกันและกัน)
-
เป็นเทคนิคที่เรียกว่ายัติภังค์ เราใช้คำว่า "เส้นประ" เพื่ออ้างถึงเส้นประ em (-) ในกรณีส่วนใหญ่และบางครั้งก็เป็นเส้นประ (-) แต่ไม่มีทั้งเครื่องหมายยัติภังค์ (-)