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?


Itu seharusnya diatur oleh standar POSIX: iam.ubc.ca/guides/javatut99/essential/attributes/_posix.html
cjc

Tautan itu sekarang 404 @cjc :( Tautan yang mungkin lebih andal adalah en.wikipedia.org/wiki/POSIX
Bernhard Hofmann

Tautan yang lebih baik: en.wikipedia.org/wiki/…
Craig Fisher

Jawaban:


110

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.


1
@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.
psusi

10
juga diingat - digunakan sendiri biasanya menandakan akhir opsi. lihat di sini untuk info lebih lanjut: unix.stackexchange.com/questions/11376/…
Sirex

3
@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.

sumber


2
Jadi mengapa java-versi dan semut-versi, lalu?
killjoy

7

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.


3

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.