Saya bertanya-tanya mengapa beberapa program memerlukan parameter command prompt mereka untuk memiliki dua tanda hubung di depan sedangkan beberapa (sebagian besar) hanya memerlukan satu tanda hubung di depan?
Misalnya sebagian besar program terlihat seperti ini: relaxer -dtd toc.xml toc_gr.xml toc_jp.xml
Sedangkan beberapa program terlihat seperti ini: xmllint --valid toc.xml --noout
Apa alasan beberapa orang membutuhkan dua tanda hubung bukan satu? Bukankah masuk akal bagi semua orang untuk tetap berpegang pada satu standar (yaitu satu tanda hubung akan dilakukan).
linux
windows
command-line
unix
Pacerier
sumber
sumber
-i
vs.--input
atau-n
--dry-run
.-dtd
seharusnya memang demikian--dtd
? Efektif apa yang saya bertanya-tanya tentang adalah apa yang dasbor (dan double-dash) mencoba untuk menandakan?--long-options
akan menerima singkatan unik juga. Jadi, untuk program dengan opsi--file-in
dan--file-out
, Anda dapat menggunakan--file-o=foo
atau--file-i=foo
, yang dapat menghemat pengetikan--very-long-optional-parameters
.convert
,mogrify
) memiliki "panjang" opsi hanya menggunakan satu tanda hubung. Sebagai contoh:xterm -fn 6x10 -geometry 80x24+30+200
. Singkatan didukung, asalkan berbeda ( misalnya ,-g
atau-geom
untuk-geometry
). Lihat X (7) untuk contoh lainnya.Jawaban:
Lakukan saja
ls --help
dan lihat opsi; itu harus jelas bagi Anda.Ini tidak ada hubungannya dengan parameter sama sekali. Banyak opsi memiliki bentuk pendek dan panjang, dan banyak yang memiliki satu dan bukan yang lain.
Dan juga, mengenai parameter, hanya saja dalam bentuk panjang ketika mereka mengambil parameter sepertinya selalu sama dengan. Tapi jelas yang pendek bisa mengambil parameter sama banyaknya; hanya saja mereka tidak menggunakan yang sama.
Berikut adalah kutipan dari
ls --help
(man ls
memberikan informasi yang setara). Perhatikan bagaimana beberapa memiliki bentuk panjang tanpa bentuk pendek (--author
,--block-size
), beberapa memiliki bentuk pendek tanpa bentuk panjang (-c
,-f
,-g
), dan beberapa memiliki kedua bentuk panjang dan bentuk pendek (-A
/--almost-all
,-b
/--escape
).sumber
ls --help
pada windows?ls
di Windows. Perintah yang setara adalahdir /?
. Anda menggunakan perangkat lunak lintas platform yang melanggar konvensi Windows yang biasa, lihat jawaban saya.ls --help
kutipan Anda . Lihat--author
dan--block-size
.ls
perintah adalah melalui GIT . GIT bash shell atau CMD window dengan GIT bin di PATH akan milikils
.Tidak ada standar luas. Ada beberapa konsistensi misalnya dalam program GNU, tetapi Anda perlu memeriksa dokumentasi masing-masing program.
Mengutip Wikipedia , beri penekanan pada saya:
Biasanya, tanda hubung menunjukkan argumen yang telah ditentukan. Saya pikir ini digunakan untuk membedakan mereka dari misalnya nama file atau label lain yang mungkin Anda gunakan sebagai argumen. Tapi itu tidak selalu terjadi (lihat di bawah).
Anda akan sering menemukan argumen yang sama tersedia sebagai opsi pendek dan panjang, seperti misalnya di ls .
Beberapa program menggunakan tanda hubung tunggal untuk opsi satu karakter, dan dua tanda hubung untuk opsi multi-karakter, tetapi tidak semua (GNU
find
datang ke pikiran). Beberapa program memiliki tanda hubung opsional atau lewati semuanya (tar
atau BSDps
muncul di benak Anda).Terkadang opsi panjang (
--foo
) memerlukan argumen, sedangkan opsi pendek (-f
) tidak (atau setidaknya menyiratkan argumen default tertentu).Opsi pendek (mis.
cut -d ' '
) Dapat memiliki argumen, sedangkan opsi panjang (mis.ls --all
) Tidak selalu memilikinya.Untuk mengatur perilaku tertentu dari suatu program, Anda kadang-kadang perlu menggunakan opsi pendek, untuk yang lain Anda perlu menggunakan opsi panjang, dan untuk beberapa Anda punya pilihan.
Pada catatan terkait, beberapa program tidak dapat menangani spasi kosong antara opsi dan argumennya , sementara yang lain tidak.
Seperti yang saya tulis di awal, tidak ada perilaku atau standar umum. Seringkali Anda dapat melacak perilaku serupa ke pustaka yang sama yang digunakan untuk parsing argumen, tetapi Anda mungkin tidak ingin membaca sumber untuk mengetahui hal ini.
Anda benar-benar tidak dapat menyimpulkan sintaks argumen satu program dari yang lain.
Jika Anda juga mempertimbangkan Windows, itu menjadi lebih buruk: Sementara baris perintah Windows secara tradisional menggunakan panggilan
/f
(setidaknya sebagian besar waktu, karakter tunggal) untuk opsi, dengan:
sebagai pemisah antara opsi dan nilainya (lihat misalnya di sini ); utilitas lintas platform tersebar luas (seperti yang Anda sebutkan) dan membawa sintaks tanda hubung yang lebih umum untuk argumen, dengan semua inkonsistensi yang disebutkan di atas.sumber
tar
,ps
,find
dan seperti memiliki sintaks baris perintah mereka ditetapkan oleh POSIX sebelum standar ini telah benar-benar gel. Pada sistem Gnu / Linux, ini adalah taruhan yang cukup aman bahwa setidaknya--help
akan (hampir) selalu didukung, danman <command>
atauinfo <command>
find
yang tidak mengikuti "konvensi GNU" untuk opsi panjang (mungkin karena alasan kepatuhan POSIX, seperti yang ditunjukkan oleh @BRPocock). Saya akan memberi +1 lagi jika saya bisa, untuk menyebutkan baris perintah DOS / Windows "switch", karena pertanyaan OP entah bagaimana diberi tag "windows," dan konvensi itu harus disebutkan untuk kelengkapannya.Ini adalah konvensi yang berasal dari * nix. Tanda hubung ganda mendahului opsi ketika mereka ditulis penuh ,, sedangkan tanda hubung tunggal mendahului opsi ketika mereka ditulis dalam bentuk pendek . Misalnya
ls --all --l
, bisa disingkat menjadils -al
. Seperti yang terlihat, tidak semua opsi memiliki padanan satu huruf, meskipun lebih banyak digunakan biasanya.Apakah opsi mengambil argumen tidak benar-benar membuat perbedaan - itu bisa mengambil mereka, atau tidak mengambil mereka, terlepas dari cara Anda memasukkan opsi.
Ketika menulis mereka untuk penggunaan satu kali, itu tidak masalah, tetapi ketika menulis perintah misalnya dalam file .alias, biasanya menggunakan formulir lengkap. Murni untuk kemudahan membaca untuk orang selanjutnya.
sumber
ini adalah sintaks UNIX konvensional,
argumen program membutuhkan satu tanda hubung ("-") diikuti dengan satu huruf ketika itu adalah pilihan sederhana (misalnya: -v ) dan dua tanda hubung ("-") ketika opsi tersebut mengambil argumen (misalnya: --file toc.xml atau --file = toc.xml )
tidak berdampak pada fungsionalitas program.
sumber
--noout
(dalam pertanyaan di atas) seharusnya benar-benar ditulis-noout
karena tidak memiliki argumen ?dash tunggal diimplementasikan oleh getopt dan merupakan fungsi standar posix , double dash di getopt_long dan merupakan standar gnu.
Secara tradisional, tanda hubung tunggal memasok opsi karakter tunggal seperti ini:
-A atau -V dll tetapi tidak perlu dibatasi untuk itu. mis. -Wall for gcc mengaktifkan semua peringatan compiler untuk perintah compiler gcc.
argumen dasbor ganda cenderung lebih verbose dan sering mengambil parameter yang disediakan seperti --max-count = NUM. Namun, --versi tidak ada bandingannya.
Secara umum, tidak ada aturan atau standar yang ditetapkan tentang bagaimana argumen program harus ditentukan, hanya sekelompok tradisi. Namun, jika fungsi parsing baris perintah getopt dan getopt_long digunakan maka parameter umumnya harus mengikuti standar sebagai fungsi perpustakaan menegakkan cara tertentu untuk melakukannya.
sumber