Apa perbedaan antara tanda hubung tunggal dan tanda hubung ganda pada perintah shell?
70
Saya baru bekerja di shell dan penggunaan perintah ini tampaknya sewenang-wenang. Apakah ada alasan satu bendera memiliki tanda hubung tunggal dan lainnya mungkin memiliki tanda hubung ganda?
Tanda hubung tunggal dapat diikuti oleh beberapa bendera karakter tunggal. Tanda hubung ganda mendahului opsi tunggal, banyak karakter.
Pertimbangkan contoh ini:
tar -czf
Dalam contoh ini, -czfmenentukan tiga bendera karakter tunggal: c, z, dan f.
Sekarang perhatikan contoh lain:
tar --exclude
Dalam hal ini, --excludetentukan satu opsi, opsi multicharacter bernama exclude. Tanda hubung ganda disambiguates argumen baris perintah, memastikan bahwa tarmenafsirkannya sebagai excludedaripada kombinasi e, x, c, l, u, d, dan e.
@kylex, tidak, karena tidak ada opsi panjang bernama hanya "c" dan - berarti opsi panjang, tidak diikuti oleh satu karakter.
psusi
13
Kadang-kadang bahkan perintah panjang dapat dilakukan dengan satu arah. Misalnya 'cdrecord' menggunakan semua perintah satu-putus-putus (-eject -dao ...). Itu semua tergantung pada programnya, tetapi kebanyakan (!) Dari mereka menggunakan - untuk perintah tunggal dan - untuk banyak karakter (panjang)
mulaz
8
@ulaz, ya, cdrecord melakukan beberapa hal konyol.
@illilljoy, karena entah karena ketidaktahuan atau pilihan, penulis program-program itu tidak mengikuti konvensi tentu saja. Sama seperti yang cdrecorddisebutkan tahun lalu di komentar di atas.
psusi
17
Itu semua tergantung pada programnya. Biasanya "-" digunakan untuk opsi 'pendek' (satu huruf, -h), dan "-" digunakan untuk opsi "panjang" (er) (--help).
Opsi pendek biasanya dapat digabungkan (jadi "-h -a" sama dengan "-ha")
Dalam sistem mirip Unix, tanda hubung ASCII biasanya digunakan untuk menentukan opsi. Karakter biasanya diikuti oleh satu atau lebih huruf. Argumen yang merupakan tanda hubung tunggal dengan sendirinya tanpa huruf apa pun biasanya menentukan bahwa suatu program harus menangani data yang berasal dari input standar atau mengirim data ke output standar. Dua karakter tanda hubung – minus (-) digunakan pada beberapa program untuk menentukan "opsi panjang" di mana nama opsi yang lebih deskriptif digunakan. Ini adalah fitur umum dari perangkat lunak GNU.
Ini benar-benar sebuah konvensi. Namun, ini dapat membantu parser untuk mengetahui lebih efisien tentang opsi yang diteruskan ke program. Selain itu, ada utilitas rapi yang dapat membantu mem- parsing perintah-perintah ini, seperti getopt(3)atau non-standar getopt_long(3)untuk membantu mem-parsing argumen program.
Itu bagus, karena kita dapat menggabungkan beberapa opsi pendek, seperti jawaban lain katakan, seperti tar -xzf myfile.tar.gz.
Jika ada argumen "lisa" untuk ls, mungkin akan ada arti yang berbeda untuk diketik ls -lisadaripada ls --lisa. Mantan adalah l, i, s, dan aparameter, bukan kata.
Bahkan, Anda bisa menulis ls -l -i -s -a, artinya persis sama dengan ls -lisa, tetapi itu akan tergantung pada programnya.
Ada juga program yang tidak mematuhi konvensi ini. Terutama untuk pandangan saya, dddan gcc.
opsi pendek dengan dasbor tunggal vs opsi panjang dengan dasbor ganda
opsi pendek dapat digabungkan menjadi satu argumen;
for example: ls -lrt #instead of ls -l -r -t
Jika kami mengizinkan opsi panjang dengan satu tanda hubung, itu menyebabkan ambiguitas. Untuk mengatasi ini, kami menggunakan dasbor ganda untuk opsi panjang.
Jawaban:
Tanda hubung tunggal dapat diikuti oleh beberapa bendera karakter tunggal. Tanda hubung ganda mendahului opsi tunggal, banyak karakter.
Pertimbangkan contoh ini:
Dalam contoh ini,
-czf
menentukan tiga bendera karakter tunggal:c
,z
, danf
.Sekarang perhatikan contoh lain:
Dalam hal ini,
--exclude
tentukan satu opsi, opsi multicharacter bernamaexclude
. Tanda hubung ganda disambiguates argumen baris perintah, memastikan bahwatar
menafsirkannya sebagaiexclude
daripada kombinasie
,x
,c
,l
,u
,d
, dane
.sumber
cdrecord
disebutkan tahun lalu di komentar di atas.Itu semua tergantung pada programnya. Biasanya "-" digunakan untuk opsi 'pendek' (satu huruf, -h), dan "-" digunakan untuk opsi "panjang" (er) (--help).
Opsi pendek biasanya dapat digabungkan (jadi "-h -a" sama dengan "-ha")
sumber
sumber
Ini benar-benar sebuah konvensi. Namun, ini dapat membantu parser untuk mengetahui lebih efisien tentang opsi yang diteruskan ke program. Selain itu, ada utilitas rapi yang dapat membantu mem- parsing perintah-perintah ini, seperti
getopt(3)
atau non-standargetopt_long(3)
untuk membantu mem-parsing argumen program.Itu bagus, karena kita dapat menggabungkan beberapa opsi pendek, seperti jawaban lain katakan, seperti
tar -xzf myfile.tar.gz
.Jika ada argumen "lisa" untuk
ls
, mungkin akan ada arti yang berbeda untuk diketikls -lisa
daripadals --lisa
. Mantan adalahl
,i
,s
, dana
parameter, bukan kata.Bahkan, Anda bisa menulis
ls -l -i -s -a
, artinya persis sama denganls -lisa
, tetapi itu akan tergantung pada programnya.Ada juga program yang tidak mematuhi konvensi ini. Terutama untuk pandangan saya,
dd
dangcc
.sumber
opsi pendek dapat digabungkan menjadi satu argumen;
Jika kami mengizinkan opsi panjang dengan satu tanda hubung, itu menyebabkan ambiguitas. Untuk mengatasi ini, kami menggunakan dasbor ganda untuk opsi panjang.
sumber