Raymond alıntı @jasonwryan bazı yararlı bilgiler var ama hikayenin ortasında başlar:
- Unix'in Multics'in sınırlı kapsamlı bir sürümü olarak başladığını ve tarihi boyunca Unix'teki özelliklerin çoğu zaman diğer sistemlerde görülen ve kullanılan özelliklerin taklitleri veya uyarlamaları olduğunu unutmayın.
'-'
Seçenek karakteri Multics kullanılmıştır. Bitsavers'ın kullanıcı komutları için bir kılavuzu vardır .
- Diğer sistemler, bazıları daha tuşa basmada etkili olduğu (
'/'
TOPS ve VMS için olduğu gibi ) ve bazılarının da ( '('
VM / SP CMS'de kullanıldığı gibi) daha fazla olduğu iddia edilen farklı karakterler kullandı.
- Multics seçenekleri çok karakterliydi, örneğin alt çizgi ile ayrılmış anahtar kelimeler.
- Daha Uzun Multics seçenekleri genellikle
-print
vs gibi daha kısa ve kısaltılmış bir biçime sahiptir -pr
(sayfa 3-8).
- Unix seçenekleri tek karakterliydi ve birkaç yıl sonra
getopt
tanıtıldı. Orijinal Unix'in bir parçası olmadığı için kullanmayan getopt
ve olduğu gibi bırakılan yardımcı programlar var . Ancak getopt
programların tutarlı olmasına yardımcı olmak.
Diğer taraftan, Unix seçeneklerini kullanma getopt
tek karakterdi. Diğer sistemler, özellikle daha büyük olanları anahtar kelimeler kullandı. Bazıları (tümü değil) bu anahtar kelimelerin kısaltılmasına izin verdi , yani seçenek belirsiz olduğu sürece sağlanan karakterlerin tümü değil. Bu testte belirsizlik için tuzaklar var. Örneğin:
- 1985'in başlarında, PrimOS'a taşınması gereken bir program üzerinde çalışıyordum . Prime'ın geliştiricileri, diğerlerinden her biri için en sık kullanılan komutları sağlayarak (birbirlerini taklit etmeye çalışan) bir komut dili sunarak, başka şirketlerle rekabet etti. Elbette kısaltmaları desteklediler (VMS'de olduğu gibi). Çevrimiçi yardımı okuduktan sonra yazmayı
sta
düşünüyorum status
. Bunun kısaltmasıydı start
ve başlaması için hiçbir şey vermediyse , komut yorumlayıcısı beni kapattı.
- X Toolkit ( xterm tarafından kullanılır ) kısaltılmış seçeneklere izin verir. Bunu xterm'de etkin bir şekilde kullanmak için, komut parametrelerini önceden
-v
(sürüm için) -vb
(görsel zil) tercih etmek için önceden işlemek zorundadır . X Toolkit'in belirsizlik olduğunda tercih edilen bir seçenek belirtmenin doğrudan bir yolu yoktur.
Bu belirsizlik potansiyeli nedeniyle, bazı geliştiriciler kısaltmalara izin vermemeyi tercih ediyor. Örneğin Lynx , kısaltmalara izin vermeden çok karakterli seçenekler kullanır.
Tüm programlar kullanılmamıştır getopt
: tar
ve kullanılmamıştır ps
. Ayrıca, rcs
(veya sccs
), dash'in isteğe bağlı olduğunu ve seçenek değerlerinin isteğe bağlı olduğunu belirterek görebileceğiniz gibi.
Bütün bunları göz önünde bulundurarak GNU geliştiricileri, diğer sistemlerde kullanılan anahtar kelime seçeneklerini getopt
, her kısa seçeneğin uzun bir versiyonunu sağlayarak genişletti . Örneğin, textutils 1.0 changelog diyor ki
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'teki değişiklik daha önceydi:
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.
Birisi daha erken bir tane bulabilir, ancak dosya başlığının en erken tarihi gösterdiği anlaşılıyor:
/* Getopt for GNU.
Copyright (C) 1987, 1989 Free Software Foundation, Inc.
(örneğin) X Toolkit (1987) ile aynı anda. Tanıdığınız Unix uygulamalarının çoğu (örneğin ls
, ps
), el kitabına periyodik ziyaretler gerektiren mevcut tek karakterli seçenekleri kullandı. Tanıtırken getopt_long
, GNU geliştiricileri bunu önce yeni seçenekler ekleyerek yapmadılar ; Onlar başladı varolan seçenekleri tabulating ve eşleşen uzun seçeneği sunarak.
Onlar Çünkü ekleyerek varolan repertuarına, (tekrar) mevcut seçenekleri ile çatışma sorun oluştu. Bunu önlemek için, uzun seçeneklerden önce iki kısa çizgi kullanarak sözdizimini değiştirdiler.
Bu programlar getopt_long
olağan nedenlerle bu şekilde kullanılmaya devam eder :
- senaryolar seçeneklere bağlıdır; geliştiriciler senaryoları kırma konusunda endişeli değil
- (etkili olabilir) yazılı bir kodlama standardı vardır
- hiç kimse belirgin bir şekilde uyumsuz olan rakip bir araç seti bulamamıştır (hem BSD'ler hem de GNU geliştiricileri seçenek adlarını birbirinden kopyalar)
-
teknik olarak kısa çizgi olarak adlandırılır . Çoğu durumda em kısa çizgi (-) ve bazen en kısa çizgi (-) ifadelerini kullanmak için "tire" kelimesini kullanıyoruz, ancak hiçbiri tire (-) değildir.