Catatan: jawaban saya BUKAN valid dalam kasus OP, dan hanya berlaku untuk alat yang mengikuti konvensi yang disebutkan di bawah ini dan tidak dalam kasus file bernama persis saja -
(tanda hubung), yang sering juga merupakan kasus khusus untuk menentukan bacaan dari standar input diharapkan. Lihat jawaban yang diterima.
Meninggalkan ini di sini karena berisi informasi yang berguna untuk kasus-kasus lain yang mungkin seseorang temukan ketika mencari jawaban.
Dash dua kali!
Gunakan --
konvensi dasbor ganda standar ( ) untuk menunjukkan argumen terakhir:
less -- -FILENAME
Contoh
$ echo "meh" > -badname
$ less -badname
Number is required after -b
$ less -- -badname # GREAT SUCCESS!
Apa?
--
Argumen ini berasal dari konvensi yang didukung oleh sebagian besar implementasi utilitas shell dan alat baris perintah, dan sebagian besar shell akan menganjurkan agar Anda harus mengikutinya ketika mengimplementasikan alat CLI.
Direkomendasikan oleh Grup Terbuka
OpenGroup juga menyebutkannya di bagian Default deskripsi utilitas (v6) dari Spesifikasi Dasarnya :
Perilaku Default: [...] Utilitas standar yang tidak menerima opsi, tetapi yang menerima operan, harus mengenali "-" sebagai argumen pertama yang akan dibuang.
Persyaratan untuk mengenali "-" adalah karena menyesuaikan aplikasi memerlukan cara untuk melindungi operan mereka dari opsi sewenang-wenang yang mungkin disediakan oleh implementasi sebagai ekstensi. Misalnya, jika utilitas standar foo terdaftar tidak mengambil opsi, dan aplikasi diperlukan untuk memberinya pathname dengan tanda hubung utama, ia dapat dengan aman melakukannya sebagai:
foo -- -myfile
dan menghindari masalah dengan -m yang digunakan sebagai ekstensi.
Dan dalam Pedoman Sintaks Utilitas (v7):
Pedoman 10:
Argumen pertama - yang bukan opsi-argumen harus diterima sebagai pembatas yang menunjukkan akhir dari opsi. Argumen berikut harus diperlakukan sebagai operan, bahkan jika mereka mulai dengan karakter '-'.
Direkomendasikan oleh Bash
Di sini, disarikan dari manual bash, tentang bawaannya yang mendukungnya:
Kecuali disebutkan sebaliknya, setiap perintah builtin didokumentasikan dalam bagian ini sebagai menerima opsi yang didahului oleh - menerima - untuk menandakan akhir dari opsi.
The:, true, false, dan test builtin tidak menerima opsi dan tidak memperlakukan - khususnya. Keluar, logout, break, lanjutkan, biarkan, dan shift builtins menerima dan memproses argumen yang 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 mengharuskan - untuk mencegah interpretasi ini.
Perhatikan bahwa gema tidak mengartikan - berarti akhir dari opsi.
Bacaan Tambahan