Saya tidak berpikir shell / utilitas dalam Unix historis atau dalam sesuatu sebagai "baru" sebagai 4.4BSD didukung menggunakan tanda hubung ganda (atau dua tanda hubung berturut-turut) sebagai akhir dari pembatas pilihan . Dengan FreeBSD , Anda dapat melihat, misalnya, catatan yang diperkenalkan di rm
manual dengan rilis 2.2.1 (1997). Tapi ini hanya dokumentasi untuk satu perintah.
Melihat changelog fileutils GNU tertua yang dapat saya temukan, saya melihat ini 1 (sedikit diubah):
Tue Aug 28 18:05:24 1990 David J. MacKenzie (djm at albert.ai.mit.edu)
* touch.c (main): Don't interpret first non-option arg as a <---
time if `--' is given (POSIX-required kludge).
* touch.c: Add long-named options.
* Many files: Include <getopt.h> instead of "getopt.h" since
getopt.h will be in the GNU /usr/include.
* install.c: Declare some functions.
* touch.c, getdate.y, posixtime.y, mktime.c: New files, from bin-src.
* posixtime.y: Move year from before time to after it (but
before the seconds), for 1003.2 draft 10.
Ini mendahului Linux . Jelas untuk memperhitungkan fakta bahwa Anda mungkin ingin membuat file dengan nama yang mengandung jumlah digit yang sama dengan spesifikasi waktu (angka desimal delapan atau sepuluh digit) - daripada menentukan cap waktu untuk file yang ada ...
- Jadi apakah itu posix.1 yang memperkenalkan dasbor ganda (
--
) sebagai akhir dari pembatas pilihan di shell Unix? - Apakah ini semua dimulai karena beberapa orang ingin menggunakan angka dalam nama file
touch
pada awal 90-an dan kemudian ini berlanjut secara bertahap satu utilitas pada suatu waktu selama satu dekade ?? - Apa komentar bersemangat di changelog tentang?
- Kapan Pedoman 10 ( Argumen - harus diterima sebagai pembatas yang menunjukkan akhir opsi. [...] ) diperkenalkan ke Sintaks POSIX Utility ?
1. Berbeda dengan ini yaitu mendokumentasikan opsi panjang dalam semua penggunaan perintah secara global, yang tidak terkait. Di sisi lain, Anda dapat melihat referensi pembatas muncul di sesuatu seperti GNU rm.c pada tahun 2000 sebagai komentar, sebelum diekspos ke pengguna akhir pada tahun 2005 ( fungsi diagnose_leading_hyphen ). Tapi ini semua kemudian dan tentang kasus penggunaan yang sangat spesifik.
getopt
yang didukung--
.getopt
ditulis pada awal 1980-an. Jika seseorang bisa mendapatkan makalah getopt dari Uniforum '85, itu mungkin memberi sedikit sejarah.--
.Jawaban:
Sejauh yang saya tahu, penggunaan
--
sebagai end-of-options-marker dimulai dengansh
dangetopt
di System III Unix (1980).Menurut sejarah keluarga Bourne Shell ini , Bourne Shell pertama kali muncul di Versi 7 Unix (1979). Tapi itu tidak memiliki cara untuk
set
untuk memisahkan pilihan dari argumen . Jadi cangkang Bourne asli bisa lakukan:set -e
- aktifkan mode keluar-pada-kesalahanset arg1 arg2 ...
- menetapkan parameter posisi$1=arg1
,$2=arg2
dllTapi:
set arg1 -e arg2
akan memberikan$1=arg1
,$2=arg2
dan nyalakan keluar-on-error . Aduh.System III Unix (1980) memperbaiki bug itu dan memperkenalkannya
getopt
. Menurutgetopt
's halaman manual :Sejauh yang saya tahu, itu adalah tempat pertama yang muncul.
Dari sana, tampaknya perintah lain mengadopsi
--
konvensi untuk menyelesaikan ambiguitas parsing argumen (seperti contoh dengantouch
danrm
Anda kutip di atas) sepanjang hari-hari liar, standar tahun 1980-an.Beberapa adopsi sedikit demi sedikit ini dikodifikasikan dalam POSIX.1 (1988), yang merupakan tempat komentar changelog tentang "Kludge yang diperlukan POSIX" berasal.
Tetapi tidak sampai POSIX.2 (1992) bahwa Pedoman Sintaks Utilitas diadopsi, yang berisi Pedoman 10 yang terkenal:
Dan di situlah berubah dari menjadi "kludge" menjadi rekomendasi universal.
sumber
getopt
tidak bisa. Saya akan membaca lebih lanjut tentang itu! Terima kasih lagi!