Apa artinya "-" (tanda hubung ganda)? (Juga dikenal sebagai "bare double dash")

469

Saya telah melihat --digunakan dalam compgenperintah.

Sebagai contoh:

compgen -W "foo bar baz" -- b

Apa arti dari --sana?

dogbane
sumber

Jawaban:

583

Lebih tepatnya, tanda hubung ganda ( --) digunakan dalam perintah bash built-in dan banyak perintah lain untuk menandai akhir opsi perintah, setelah itu hanya parameter posisi yang diterima.

Contoh penggunaan: katakanlah Anda ingin grep file untuk string -v- biasanya -vakan dianggap opsi untuk membalikkan makna yang cocok (hanya tampilkan baris yang tidak cocok), tetapi dengan --Anda dapat grep untuk string -vseperti ini:

grep -- -v file
Guss
sumber
3
Terutama di Bash setbuilt-in, di mana itu benar-benar diperlukan.
l0b0
10
--berfungsi untuk memisahkan opsi dari ekspresi reguler grep, tetapi cara kanonik adalah dengan menggunakan -e/ --regexp.
l0b0
5
@ l0b0: pola untuk mencari biasanya adalah salah satu dari parameter posisi, sehingga bisa pas setelah --, meskipun Anda benar dalam mencatat bahwa contoh saya di atas juga dapat ditulis sebagai grep -e -v file(walaupun itu sangat membingungkan).
Guss
2
Tidak semua bashperintah bawaan menerima --sebagai akhir dari penanda opsi. [dan echojangan misalnya ( salah satu alasan echotidak dapat digunakan dengan andal ).
Stéphane Chazelas
44

Ini menandai akhir dari daftar parameter (opsi).

polemon
sumber
39

Dalam man bashkita dapat membaca di Shell Built Perintah bagian:

Kecuali disebutkan sebaliknya, setiap perintah builtin didokumentasikan dalam bagian ini sebagai menerima opsi yang didahului oleh -accepts -- untuk menandakan akhir dari opsi .

The :, true, false, dan testbuiltin tidak menerima pilihan dan tidak memperlakukan --khusus. The exit, logout, break, continue, let, dan shiftbuiltin menerima dan argumen proses dimulai dengan -tanpa memerlukan --. Builtin lain yang menerima argumen tetapi tidak ditentukan sebagai opsi menerima menafsirkan argumen dimulai dengan -sebagai opsi yang tidak valid dan perlu --untuk mencegah interpretasi ini.

Catatan yang echotidak menafsirkan --berarti akhir dari opsi.

kenorb
sumber
2
+1 untuk referensi man bash(perhatikan sendiri untuk lain kali:).
user3773048