Kebingungan tentang perubahan makna argumen dan opsi, apakah ada definisi standar resmi?

11

Saya menemukan variasi yang membingungkan dalam memahami opsi dan argumen apa yang berkaitan dengan sintaksis perintah.

Misalnya, saya menjumpai definisi seperti:

  • command -a -b -c d e f

    beberapa berbeda antara -a -b -c, menyebutnya opsi atau sakelar dan d e fdengan menyebutnya argumen.

  • command -a -b -c d e f

    beberapa, misalnya bashmanual, memanggil semua -a -b -c d e fargumen dan menjelaskan, bahwa semuanya dapat diakses dari skrip $1 $2 $3 $4 $5 $6masing-masing.

  • command -a b=c

    beberapa panggilan -aopsi, bargumen dan cnilai, tetapi yang lain mencampurnya seperti dalam dua poin pertama, dalam satu varietas memanggil semua -a b cargumen.

Ketiga versi itu hanyalah contoh untuk kebanyakan varietas panggilan yang berbeda, saya bahkan tidak tahu cara mendaftar semuanya, tetapi saya perhatikan bahwa pasti tidak ada konvensi penamaan yang pasti.

Atau setidaknya, tidak ada konvensi penamaan standar yang saya tahu, karena saya menemukan sumber acak yang berbeda, tetapi bahkan di antara situs resmi atau manual yang berafiliasi dengan Linux dan GNU saya dapat menemukan ketidakkonsistenan ini.

Apakah ada skema penamaan resmi yang tidak dapat dipertanyakan yang bisa saya lihat?

sharkant
sumber
Bentuk kedua adalah 100% benar dari sudut pandangnya sendiri. Konteks sangat penting.
Oskar Skog

Jawaban:

18

Diadaptasi dari bagian "Utilitas Argument Syntax" standar POSIX :

utility_name [-a] [-b] [-c option_argument]
             [-d|-e] [-f[option_argument]] [operand...]

Utilitas dalam contoh ini dinamai utility_name. Ini diikuti oleh opsi , argumen opsi , dan operan .

Argumen yang terdiri dari -karakter dan huruf atau digit tunggal, seperti a, dikenal sebagai opsi (atau, secara historis, bendera ). Opsi-opsi tertentu diikuti oleh argumen-opsi , seperti yang ditunjukkan dengan [-c option_argument]. Argumen yang mengikuti opsi terakhir dan argumen opsi diberi nama operan .

Standar ini juga mendefinisikan "argumen" sebagai

Dalam bahasa perintah shell, parameter dilewatkan ke utilitas sebagai setara dengan string tunggal dalam argvarray yang dibuat oleh salah satu execfungsi. Argumen adalah salah satu opsi, argumen-opsi, atau operan yang mengikuti nama perintah.


Semua hal setelah utility_namepada baris perintah adalah argumen utilitas , dan semuanya muncul dalam parameter posisi jika itu adalah skrip shell. Opsi istilah, argumen opsi, dan operan adalah nama yang lebih spesifik untuk argumen ini di baris perintah.

"Tandai" dan "alihkan" adalah sinonim umum untuk "opsi".

Dalam kasus

utility -a b=c
  • -adan b=cmerupakan argumen,
  • -aadalah opsi jika utilitas mengenalinya ( lnutilitas tidak memiliki -xopsi, jadi -xbukan opsi untuk ln, secara tegas, dan ln -xakan memicu pesan diagnostik),
  • b=cadalah pilihan-argumen jika itu -apilihan membawa argumen, kalau tidak operan,
  • bdan cyang tidak pilihan, pilihan-argumen dan tidak operan dalam diri mereka.

Seperti yang Anda perhatikan dari teks saya di atas, bekerja dari sinopsis suatu utilitas (seperti yang diberikan oleh manual utilitas) akan lebih mudah daripada mencoba memecahkan kode perintah generik yang diketik pada baris perintah. Manual ini akan dengan jelas menyatakan opsi apa yang mengambil argumen opsi dan argumen apa yang operan, dll.

Untuk memanggil c"nilai" adalah IMHO sangat ok. Ini bukan sesuatu yang terstandarisasi, tetapi sangat sedikit yang akan salah paham jika Anda mengatakan " cadalah nilai yang diberikanb ". Akan jelas dari konteks utilitas yang dimaksud.

Sebagai contoh

$ awk -v var="d" '...' data.in

Siapa pun yang tahu tentang awkakan mengatakan bahwa -v var="d"berarti " yang awkvariabel varditugaskan nilai dpada baris perintah ".

Kusalananda
sumber