Bash berperilaku agak non-standar ketika datang ke -
.
POSIX mengatakan:
Pedoman 10: Argumen
pertama --
yang bukan opsi-argumen harus diterima sebagai pembatas yang menunjukkan akhir opsi. Argumen berikut harus diperlakukan sebagai operan, bahkan jika mereka mulai dengan-
karakter.
[...]
Panduan 13:
Untuk utilitas yang menggunakan operan untuk mewakili file yang akan dibuka baik untuk membaca atau menulis, -
operan harus digunakan untuk berarti hanya input standar (atau output standar ketika jelas dari konteksnya bahwa file output sedang ditentukan) atau nama file -
.
Dan
Jika utilitas yang dijelaskan dalam volume Shell dan Utilitas dari POSIX.1-2017 sesuai dengan pedoman ini diperlukan untuk menerima, atau tidak menerima, operan -
berarti input atau output standar, penggunaan ini dijelaskan di bagian OPERANDS. Kalau tidak, jika utilitas tersebut menggunakan operan untuk mewakili file, itu adalah implementasi yang ditentukan apakah operan -
singkatan dari input standar (atau output standar), atau untuk file bernama -
.
Tapi kemudian man 1 bash
terbaca:
A --
menandai akhir opsi dan menonaktifkan pemrosesan opsi lebih lanjut. Setiap argumen setelah --
diperlakukan sebagai nama file dan argumen. Argumen -
setara dengan --
.
Jadi untuk Bash -
berarti bukan input standar atau file, maka agak non-standar.
Sekarang kasus khusus Anda:
curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
Saya menduga penulis perintah ini mungkin tidak menyadari -
setara dengan --
dalam hal ini. Saya curiga penulis ingin memastikan bash
akan membaca dari input standarnya, mereka diharapkan -
bekerja sesuai dengan pedoman 13.
Tetapi bahkan jika itu bekerja sesuai dengan pedoman, -
akan tidak perlu di sini karena bash
mendeteksi ketika input standarnya adalah pipa dan bertindak sesuai (kecuali -c
diberikan dll.).
Namun -
tidak bekerja sesuai dengan pedoman, itu berfungsi seperti --
. Masih --
tidak perlu di sini karena tidak ada argumen setelahnya.
Menurut pendapat saya yang terakhir -
tidak mengubah apa pun. Perintah itu 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 file bernama foo
ada. Ini akan mencetak file:
cat foo
Biarkan file bernama --help
ada. Ini tidak akan mencetak file:
cat --help
Tetapi ini akan mencetak file bernama --help
:
cat -- --help
Ini akan menyatukan file bernama --help
dengan apa pun yang berasal dari input standar:
cat -- --help -
Tampaknya Anda tidak benar-benar membutuhkannya --
, karena Anda selalu dapat lulus ./--help
yang akan ditafsirkan sebagai file pasti. Tapi pertimbangkan
cat "$file"
ketika Anda tidak tahu sebelumnya apa isi variabel itu. Anda tidak bisa hanya bergantung ./
padanya, karena itu mungkin jalan yang absolut dan ./
akan merusaknya. Di sisi lain itu mungkin file bernama --help
(karena mengapa tidak?). Dalam hal --
ini sangat berguna; ini adalah perintah yang jauh lebih kuat:
cat -- "$file"