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.