The kutipan dari Raymond oleh @jasonwryan memiliki beberapa informasi yang berguna, tetapi dimulai di tengah-tengah cerita:
- Ingatlah bahwa Unix dimulai sebagai versi Multics yang diperkecil, dan sepanjang sejarahnya, fitur-fitur di Unix sering kali merupakan tiruan atau adaptasi dari fitur yang dilihat dan digunakan pada sistem lain.
- The
'-'
karakter pilihan digunakan dalam Multics. Bitsavers memiliki manual untuk perintah penggunanya .
- Sistem lain menggunakan karakter yang berbeda, beberapa dengan lebih banyak mengklaim lebih hemat keystroke (seperti
'/'
digunakan untuk TOPS dan VMS) dan beberapa lainnya kurang (seperti '('
digunakan dalam VM / SP CMS).
- Opsi multikota bersifat multi-karakter, mis., Kata kunci dipisahkan oleh garis bawah.
- Opsi Multics yang lebih panjang sering kali memiliki bentuk yang lebih pendek dan disingkat, seperti
-print
vs -pr
(halaman 3-8).
- Opsi Unix adalah karakter tunggal, dan setelah beberapa tahun,
getopt
diperkenalkan. Karena itu bukan bagian dari Unix asli, ada utilitas yang tidak menggunakan getopt
dan dibiarkan apa adanya. Tetapi setelah getopt
membantu membuat program konsisten.
Di sisi lain, opsi Unix menggunakan getopt
karakter tunggal. Sistem lain, khususnya yang lebih besar, menggunakan kata kunci. Beberapa (tidak semua) mengizinkan kata kunci tersebut disingkat , yaitu, tidak semua karakter disediakan selama opsi tidak ambigu. Ada jebakan dalam tes ambiguitas itu. Sebagai contoh:
- awal tahun 1985, saya mengerjakan sebuah program yang harus porting ke PrimOS . Pengembang Prime bersaing dengan beberapa perusahaan lain dengan menawarkan bahasa perintah yang (mencoba) meniru masing-masing, memberikan perintah yang paling umum digunakan dari masing-masing. Tentu saja, mereka mendukung singkatan (seperti yang dilakukan VMS). Setelah membaca bantuan online, saya mengetik
sta
, berpikir untuk mendapatkannya status
. Itu adalah singkatan dari start
, dan setelah tidak memberikan apa-apa untuk memulai , penerjemah perintah mengeluarkan saya.
- X Toolkit (digunakan oleh xterm ) memungkinkan opsi yang disingkat. Untuk menggunakan ini secara efektif dalam xterm, ia harus preprocess parameter perintah untuk memilih
-v
(untuk versi) daripada -vb
(bel visual). X Toolkit tidak memiliki cara langsung untuk menentukan opsi yang disukai ketika ada ambiguitas.
Karena potensi ambiguitas ini, beberapa pengembang memilih untuk tidak mengizinkan singkatan. Lynx , misalnya, menggunakan opsi multi-karakter tanpa mengizinkan singkatan.
Tidak semua program digunakan getopt
: tar
dan ps
tidak. Juga tidak rcs
(atau sccs
), seperti yang Anda lihat dengan mencatat di mana tanda hubung adalah opsional, dan nilai opsi adalah opsional.
Dengan mempertimbangkan semua ini, pengembang GNU mengadaptasi opsi kata kunci yang digunakan dalam sistem lain dengan memperluas getopt
untuk menyediakan versi panjang dari setiap opsi pendek. Misalnya, textutils 1.0 changelog berkata
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.
Perubahan dalam fileutils sebelumnya:
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.
dan seseorang mungkin menemukan yang lebih awal, tetapi tampaknya file-header menunjukkan tanggal paling awal:
/* Getopt for GNU.
Copyright (C) 1987, 1989 Free Software Foundation, Inc.
yang (misalnya) bersamaan dengan X Toolkit (1987). Sebagian besar utilitas Unix yang Anda kenal (seperti ls
, ps
) menggunakan opsi karakter tunggal yang ada yang memerlukan kunjungan berkala ke manual. Saat memperkenalkan getopt_long
, pengembang GNU tidak melakukan ini dengan terlebih dahulu menambahkan opsi baru; mereka mulai dengan tabulasi opsi yang ada dan memberikan opsi panjang yang cocok.
Karena mereka menambah repertoar yang ada, ada (lagi) masalah konflik dengan opsi yang ada. Untuk menghindari ini, mereka mengubah sintaks, menggunakan dua tanda hubung sebelum opsi panjang.
Program-program ini terus digunakan getopt_long
dengan cara ini untuk alasan yang biasa:
- skrip bergantung pada opsi; pengembang tidak ingin merusak skrip
- ada standar pengkodean tertulis (yang mungkin efektif)
- tidak ada yang datang dengan seperangkat alat bersaing yang sangat tidak kompatibel (baik BSD dan pengembang GNU menyalin nama opsi dari satu sama lain)
-
secara teknis disebut tanda hubung . Kami menggunakan kata "tanda hubung" untuk merujuk ke tanda hubung em (-) dalam banyak kasus, dan terkadang tanda hubung en (-), tetapi tidak ada yang merupakan tanda hubung (-).