Dari mana konvensi menggunakan tanda hubung tunggal untuk huruf dan tanda hubung ganda untuk kata-kata berasal dan mengapa terus digunakan?
Misalnya jika saya mengetik ls --help
, Anda melihat:
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author with -l, print the author of each file
-b, --escape print octal escapes for nongraphic characters
--block-size=SIZE use SIZE-byte blocks
-B, --ignore-backups do not list implied entries ending with ~
...
Saya mencoba googling - and -- convention
bahkan dengan kutipan dengan sedikit keberhasilan.
command-line
history
options
Larry
sumber
sumber
-
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 (-).java -version
find . -delete
-ab
yang mengaktifkan keduanyaa
danb
. Tanpa dasbor ganda,-help
akan mengaktifkanh
,e
,l
, danp
pilihan.Jawaban:
Dalam The Art of Unix Programming, Eric Steven Raymond menjelaskan bagaimana praktik ini berkembang:
[1] http://www.faqs.org/docs/artu/ch10s05.html
sumber
Salah satu alasan untuk terus menggunakan opsi huruf adalah karena mereka dapat dirangkai:
ls -ltr
adalah banyak lebih mudah untuk mengetik darils --sort=time --reverse --format=long
. Ada beberapa kali saat keduanya bagus untuk digunakan. Sedangkan untuk mencari topik ini, cobalah "unix command line options convention".sumber
ls --sort=time --reverse --format=long
, tidak baik untuk menyebutkan metode yang tidak standar ini.The kutipan dari Raymond oleh @jasonwryan memiliki beberapa informasi yang berguna, tetapi dimulai di tengah-tengah cerita:
'-'
karakter pilihan digunakan dalam Multics. Bitsavers memiliki manual untuk perintah penggunanya .'/'
digunakan untuk TOPS dan VMS) dan beberapa lainnya kurang (seperti'('
digunakan dalam VM / SP CMS).-print
vs-pr
(halaman 3-8).getopt
diperkenalkan. Karena itu bukan bagian dari Unix asli, ada utilitas yang tidak menggunakangetopt
dan dibiarkan apa adanya. Tetapi setelahgetopt
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:sta
, berpikir untuk mendapatkannyastatus
. Itu adalah singkatan daristart
, dan setelah tidak memberikan apa-apa untuk memulai , penerjemah perintah mengeluarkan saya.-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
danps
tidak. Juga tidakrcs
(atausccs
), 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 berkataPerubahan dalam fileutils sebelumnya:
dan seseorang mungkin menemukan yang lebih awal, tetapi tampaknya file-header menunjukkan tanggal paling awal:
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 memperkenalkangetopt_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:sumber
Dalam antarmuka baris perintah wikipedia dilaporkan:
sumber
Dugaan saya adalah bahwa opsi yang lebih deskriptif diinginkan dan juga dengan opsi yang lebih lama Anda tidak perlu khawatir kehabisan opsi karakter tunggal.
Setelah Anda memutuskan ingin opsi panjang, Anda memiliki masalah, setidaknya jika Anda berencana untuk mendukung opsi panjang dan pendek. Saya tidak positif, tetapi saya yakin jawaban arcege memegang kunci mengapa - dan -. Rutin pemrosesan generik, misalnya. getopt_long (), perlu tahu apakah argumen baris perintah tunggal dapat berisi beberapa opsi, mis. -ltr. Dengan demikian suatu rutinitas pemrosesan perlu dapat membedakan antara keduanya. Jika saya membaca tanda hubung tunggal, -, maka sisa argumen baris perintah dapat cocok dengan beberapa opsi. Jika saya membaca tanda hubung ganda, -, maka sisa argumen baris perintah harus cocok dengan satu opsi.
Saya baru saja menggunakan getopt_long () dan saya mulai menyukai opsi panjang karena lebih mudah diingat dan didokumentasikan sendiri. Jika saya memiliki dua perintah berikut:
./aggregator -f 15
./aggregator - flush-time 15
Saya akan mengatakan yang kedua menggunakan opsi panjang lebih jelas.
sumber
Mungkin ada beberapa alasan mengapa kedua metode ini digunakan. Satu, tentu saja, adalah tradisi. Pemrogram dan pengguna adalah manusia, dan manusia mengharapkan sesuatu berfungsi dengan cara tertentu. Jika tidak ada alasan untuk berubah (dan sungguh, untuk baris perintah, tidak ada banyak alasan untuk berubah), maka jangan.
Yang sedang berkata, saya tahu bahwa ada alat di luar sana yang menggunakan tanda hubung tunggal untuk opsi yang panjang, atau bahkan menyingkirkan tanda hubung sama sekali. Alat-alat ini mungkin sulit pada awalnya, dan cenderung menonjol sebagai kutil dalam sistem yang tidak disatukan.
Ketika saya mempelajari perbedaan antara keduanya (dan sebelum menjadi sifat kedua), saya akan selalu ingat bahwa tanda hubung "pendek" cocok dengan opsi "pendek", sedangkan tanda hubung "panjang" (atau ganda) cocok dengan tanda "panjang" pilihan. Saya tidak tahu apakah alasan itu digunakan dalam pengembangan gaya tanda hubung ganda, tapi itu kemungkinan.
sumber