Apa artinya "-" dalam perintah terminal?

23

Saya telah melihat banyak tutorial yang menggunakan --perintah after. Sesuatu seperti ini:

command -- 

Apa artinya ini --?

Jibril
sumber
Video tutorial apa?
TheWanderer
Sebenarnya, saya terkejut bahwa pertanyaan ini belum menjadi penipuan pada AU. Apakah pertanyaan identik pada komunitas StackExchange lainnya tidak dihitung sebagai dupes (yaitu tautan yang diberikan oleh @edwinksl)? Apa untungnya? Mungkin saya harus menanyakan itu pada META ....
Cbhihe
@ Cbhihe Saya tidak mengetahui mekanisme yang memungkinkan kami untuk menunjuk duplikat target situs SE lainnya. Bagaimanapun, itu tidak terjadi terlalu sering, jadi mungkin tidak perlu.
edwinksl
3
@ anonim2 mengapa kita mau melakukan itu? Pertanyaannya adalah pada topik di sini, sehingga bisa tetap. Memindahkannya akan menghapus informasi dari AU dan tidak menambahkan hal baru ke U&L, jadi saya tidak melihat mengapa itu akan menjadi hal yang baik.
terdon

Jawaban:

46

Yang --digunakan untuk menunjukkan akhir opsi baris perintah. Ini memungkinkan Anda untuk menggunakan argumen yang dimulai dengan --. Misalnya, jika Anda membuat file bernama --foo:

$ > '--foo'
$ ls
--foo

Dan kemudian mencoba menghapusnya, rmakan berpikir Anda memberikan argumen:

$ rm --foo 
rm: unrecognized option '--foo'
Try 'rm ./--foo' to remove the file '--foo'.
Try 'rm --help' for more information.

Salah satu cara mengatasi ini adalah dengan menggunakan --:

$ rm -- --foo

Ini adalah praktik umum dan direkomendasikan oleh POSIX , sehingga didukung oleh banyak program.

terdon
sumber
13
Itu tidak diterapkan oleh Bash sama sekali. Ini adalah fitur rmprogram dan banyak utilitas yang sesuai dengan POSIX. Lihat Pedoman 10 . Untuk benar-benar memastikan bahwa itu bukan Bash yang melakukan pekerjaannya (dan itu tidak masuk akal), buat saja skrip kecil dengan adil printf '> %s <\n' "$@"dan jalankan dengan --.
gniourf_gniourf
3
@gniourf_gniourf d'oh! Saya memang mengecek dengan menulis skrip perl kecil yang mencetak opsinya dan tidak melihat jika Anda melewatinya --, tetapi, tentu saja, itu hanya karena modul Perl yang relevan ( getopts) juga mendukungnya. Anda benar, saya baru saja mencari man bash, melihat bagian yang telah saya kutip tetapi gagal untuk melihat bahwa itu ada di bagian "opsi baris perintah". Terima kasih atas koreksi, jawabannya diedit.
terdon
1

Sebagian besar perintah akan menggunakan a - untuk memberi tahu perintah bahwa parameter lebih lanjut harus diperlakukan secara berbeda. Salah satu contohnya adalah rm - --filename yang disebutkan di atas. Contoh lain, skrip seperti 'startx' akan mengartikan semuanya sendiri sebelumnya -, dan meneruskan semuanya setelahnya ke server X.

delt
sumber