Bash berperilaku agak tidak standar dalam hal -
.
POSIX mengatakan:
Pedoman 10:
--
pertama argumen yang bukan merupakan opsi-argumen harus diterima sebagai pembatas yang menunjukkan akhir dari opsi. Argumen berikut harus diperlakukan sebagai operan, meskipun dimulai dengan-
karakter.[…]
Pedoman 13:
Untuk utilitas yang menggunakan operan untuk merepresentasikan file yang akan dibuka untuk membaca atau menulis,-
operan harus digunakan hanya untuk input standar (atau output standar ketika jelas dari konteks bahwa file output sedang ditentukan) atau file bernama-
.
Dan
Jika utilitas yang dijelaskan di Shell and Utilities volume POSIX.1-2017 sesuai dengan panduan ini diharuskan untuk menerima, atau tidak menerima, operand
-
berarti input atau output standar, penggunaan ini dijelaskan di bagian OPERANDS. Jika tidak, jika utilitas seperti itu menggunakan operan untuk merepresentasikan file, implementasinya ditentukan apakah operan-
singkatan dari input standar (atau output standar), atau untuk file bernama-
.
Tapi kemudian man 1 bash
berbunyi:
A
--
menandakan akhir opsi dan menonaktifkan pemrosesan opsi lebih lanjut. Argumen apa pun setelah--
diperlakukan sebagai nama file dan argumen. Argumen-
setara dengan--
.
Jadi untuk Bash -
berarti bukan masukan standar atau file, karenanya agak tidak standar.
Sekarang kasus khusus Anda:
curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
Saya curiga pembuat perintah ini mungkin tidak menyadari -
setara dengan --
pada kasus ini. Saya curiga penulis ingin memastikan bash
akan membaca dari input standarnya, mereka mengharapkan -
untuk bekerja sesuai dengan pedoman 13.
Tetapi meskipun itu bekerja sesuai dengan pedoman, -
tidak diperlukan di sini karena bash
mendeteksi ketika input standarnya berupa pipa dan bertindak sesuai dengan itu (kecuali -c
diberikan dll).
Namun -
tidak bekerja sesuai dengan pedoman, bekerja seperti --
. Masih --
tidak diperlukan di sini karena tidak ada argumen setelahnya.
Menurut saya -
terakhir mengubah apa-apa. Perintah akan bekerja tanpanya.
Untuk melihat bagaimana --
dan -
dapat bermanfaat secara umum, pelajari contoh di bawah ini.
cat
di Kubuntu saya mematuhi kedua pedoman dan saya akan menggunakannya untuk menunjukkan kegunaan -
dan --
.
Biarkan sebuah file bernama foo
ada. Ini akan mencetak file:
cat foo
Biarkan sebuah file bernama --help
ada. Ini tidak akan mencetak file:
cat --help
Tapi ini akan mencetak file bernama --help
:
cat -- --help
Ini akan menggabungkan file bernama --help
dengan apa pun yang berasal dari input standar:
cat -- --help -
Sepertinya Anda tidak terlalu membutuhkan --
, karena Anda selalu dapat meneruskan ./--help
yang akan ditafsirkan sebagai file pasti. Tapi pertimbangkan
cat "$file"
ketika Anda tidak tahu sebelumnya apa isi dari variabel tersebut. Anda tidak bisa begitu saja menambahkan ./
untuk itu, karena itu mungkin merupakan jalur absolut dan ./
akan merusaknya. Di sisi lain itu mungkin menjadi file bernama --help
(karena kenapa tidak?). Dalam hal ini --
sangat berguna; ini adalah perintah yang jauh lebih kuat:
cat -- "$file"
Di man bash
, di akhir opsi karakter tunggal ada:-
-- A -- signals the end of options and disables further option processing.
Any arguments after the -- are treated as filenames and arguments. An
argument of - is equivalent to --.
Jika Anda telah mengutip perintah lengkapnya, saya tidak melihat alasan untuk menggunakan -
setelah bash
dalam hal ini, tetapi tidak ada salahnya.