GNU/Linux >> Belajar Linux >  >> Linux

Apa arti - (tanda hubung) terakhir dalam opsi `bash`?

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.


Linux
  1. Apa Artinya “–” (tanda hubung ganda)?

  2. Apa Artinya Dalam Keluaran Dari Ps?

  3. Apa arti titik sebelum nama variabel dalam struct?

  1. Apa arti &di akhir perintah linux?

  2. Apa arti sintaks |&dalam bahasa shell?

  3. Apa arti 'rc' di `.bashrc`, dll.?

  1. Apa arti nama antarmuka eth0 di Linux?

  2. Apa arti huruf 'u' di /dev/urandom?

  3. Apa yang dimaksud dengan kemampuan ep?