Bayrak, seçenek ve argüman arasındaki fark nedir? [kapalı]


14
  • ls -a( -aBir seçenek olduğunu düşünüyorum )

  • sudo -u username( -u= seçenek, username= arg)

  • chmod 664 my-dir( 664= seçenek, my-dir= arg)

Belki de dir listeye bakarken dışında "Bu bir bayrak" diyebilir bir örnek düşünemiyorum:

-r--------. 1 david david   3344 May 19 17:48 611056.pdf

Bu, sahibi için "okuma bayrağı" ayarlanmış, ancak hepsi bu. Buna "okuma seçeneği" dememi engelleyecek ne var?

Öncelikli olarak DocBook XML'de teknik dokümantasyon yazıyorum ve düzenliyorum ve farkın mümkün olduğunca tutarlı ve doğru bir açıklamasını arıyorum. Ancak, ben zaten bir desen oluşturan görüyorum:

  1. bayraklar Boolean olma eğilimindedir. Örneğin,setenforce 0
  2. seçenekler bir komutun nasıl davranması gerektiğini tanımlamaya yardımcı olur. Bazıları isteğe bağlı olabilir.
  3. argümanlar komutlara hangi nesnenin üzerinde çalışacağını söyler.

Kendimi bayrakları ve seçenekleri birleştirirken görebiliyordum (bazı seçeneklerin bir düzine olası değeri olabilir, ancak Boole'ların sadece iki tane var). Bağımsız değişkenler, onları bu şekilde sürdürmek için yeterince farklı görünür.


2
"Beni aramasını engelleyecek ne var?"? Oo Hiçbir şey. Tıpkı hiçbir şeyin bir kürek ağacı dememi engellememesi gibi.
muru

@muru - bir İngilizce sözlük iddianıza katılmayacak olsa da.
DarkHeart

3
İşleri daha karmaşık hale getirmek için, ls -aörneğinizde olduğu gibi, bir parametreyi / argümanı bayrak almayan bir seçenek de çağırırım . (Bana göre, bir bayrak bir boole değişkendir.)
Ulrich Schwarz

3
Onlar köpek kulübeleridir ; hepsi otuz. :-) ⁠
Scott

Gördüğünüz kalıp sadece orada çünkü görmek istediğiniz şeyleri daraltmışsınız. Onu çıkarmak mesela (ben fazla 30 yıldır kullanıyoruz o) ve bir TAR dosyası oluşturmak için bir yoludur: tar c abc.txt > x.tarorada, cbir olan fonksiyon . Buna bir seçenek demeye çalışıyorsunuz ve bu tamamen uygunsuz.
Anthon

Yanıtlar:


17

"Seçenek", "argüman" ve "bayrak" terimlerinin tutarlı tanımları yoktur ve yazılım geliştirme dünyasında bunların kullanımını zorlayabilecek merkezi bir otorite yoktur. Bu çok terminoloji ile olur: "dizin" kelimesini kullandıktan 30 yıl sonra, şimdi Microsoft'un yeni konuşması tarafından karıştırılan "klasör" kelimesini kullanan insanlarla uğraşmak zorundayım.

Programlamada terimler için uzlaşma tanımlarının ortaya çıkmasının farklı yolları vardır. "Argüman" / "seçenek" / "bayrak" durumunda, programlama dilleri için kanonik el kitapları ve öğreticiler, ortak kütüphanelerde kullanılan terimler gibi kullanımı zorlamaya yardımcı olmuştur.

Örneğin, bir komuttan sonra komut satırına koyduğunuz şeylere, genellikle bir işlev çağrısının argümanlarına benzetilerek komuta "argümanlar" denir ve bunun nedeni büyük olasılıkla kısmen C kılavuzunda "argümanlar" olarak adlandırılır ( dolayısıyla argcve argv). argparsePython kütüphanesi de terimini "argümanı" zorlamak için yardımcı olur. Ancak, bunların "parametreler" olarak da adlandırıldığını gördüm.

"Seçenek" terimi, dışarıda bırakılabilecekleri anlamına gelen "isteğe bağlı" teriminden türetilir. getoptC kütüphanesi bu terimin tek bir kullanımıdır. Ancak, aslında isteğe bağlı olmayan "seçenekler" için emsal vardır: örneğin, argparse elkitabında "gerekli bir seçenek" oluşturulabileceği belirtilmektedir (yine de bunun "genellikle kötü form olarak kabul edildiğini" belirtmesine rağmen). Seçenekler genellikle tek (öncesinde -) ya da çift ( --uzun opsiyon) tire, ancak gerektiren veya seçenekleri için tire kullanımını zorlamaz tanınmış komutlar vardır (örneğin tar, psve dd). Bir seçeneğin kendisi bir bağımsız değişken (ör. -w80Ve --color=always) veya bazen birden fazla bağımsız değişken alabilir.

"Bayraklar" benim tecrübelerime göre, seçeneklerle aynıdır, ancak genellikle argümanları kendileri almazlar ve aslında boole açma-kapama anahtarlarını temsil ederler.

Daha geniş bir notta, her programcı bir şeyler yapmanın ve bir şeyleri adlandırmanın standart bir yolunu arama ve arama seçeneğine sahip olduğundan, aynı zamanda tekerleği fazladan maliyet olmadan yeniden yaratabilir, adlandırma asla tutarlı olmayacaktır. Kodunuzu belgeledikten sonra ve örnekler vererek bu kelimelere ne gibi yeni bir anlam verdiğiniz açıktır, bu isimler ve anlamlar, kodunuzdan alan yeterli sayıda kişi varsa yapışabilir.


7

Bayrak bir seçenek, boole türü bir seçenektir ve varsayılan olarak her zaman yanlıştır (örneğin --verbose, --quiet, --all, --long, vb.).

Bir seçenek, işleve nasıl davranacağını (örn., -A, -l, --verbose, --output, -name, -c, vb.) Söyler; bir bağımsız değişken, işleve ne üzerinde / eylemde bulunacağını söyler (örn *. Dosya1, hostname, veritabanı).


Yani tanımında, içinde git pull git://bla/bla, pullanlatır bir argümandır gitüzerinde çalışmak ne.
Anthon

1
@Hayır hayır, işleçler (anahtarlar / bayraklar / parametreler), bağımsız değişkenler ve komutlar var . pullbir komuttur. Komutlar uygulamanın adının uzantıları olarak düşünülebilir: git pull <...> adlı uygulamaya eşdeğerdir git-pull. Uygulamanın komutları olduğunda, her komut uygulamanın tamamen farklı bir şey yapmasını sağlar.
Ziggy Crueltyfree Zeitgeister

Git insanlar buna bir komut diyebilirler, ama buna her zaman denir, örneğin tar, coluşturmak için kullanmaya bir işlev denir . Ve bu tam olarak sorun: Cevabınızda olduğunu düşünüyormuş gibi görünse bile, terimlerin standardizasyonu yok
Anthon

bayrak varsayılan olarak yanlış olmak zorunda değildir. komut satırında bayrağın sağlanması yalnızca varsayılan durumunu tersine çevirir (açık -> kapalı veya kapalı -> açık). bazı insanlar bunu bir bayraktan ayırmak için bir geçiş derler. diğerleri ayrımın önemsiz olduğunu düşünüyor.
cas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.