GNU/Linux >> Znalost Linux >  >> Linux

Předávání možností programu:jaká je konvence pro jednu pomlčku vs dvě?

Nejběžnější je GNU getopt styl, s jednou pomlčkou pro krátké možnosti a dvěma pomlčkami pro dlouhé možnosti.

  • Zpočátku používaly unixové programy jednopísmenné možnosti, kterým předcházela jedna pomlčka a volitelně vázané:

    ls -laF
    
    ls -l -a -F
    

    Oba výše uvedené příkazy jsou stejné.

    Když volba nabývá hodnoty, přepíše sdružování:V gpg -aofoo.gpg , -a a -o jsou volby a foo.gpg je hodnota přiřazená -o .

  • Většina z nich ano.

    tar cvzf je běžný pohled. Aktuální verze akceptují tar -cvzf také a v závislosti na tom, zda přidáte pomlčku, budou argumenty interpretovány velmi odlišnými způsoby. Například tyto dva znamenají totéž (všimněte si, že možnosti bez pomlček nejsou bezprostředně před jejich hodnotou):

    tar -xf file.tgz -vzO /etc/passwd /var/backups
    
    tar xfvzO file.tgz /etc/passwd /var/backups
    

    BSD ps vždy používá -; SysV ps nikdy ne. Verze pro Linux přijímá obě verze a mění své chování v závislosti na tom, zda byla volba předponou s pomlčkou. (Na rozdíl od výše uvedeného příkladu tar ps mění možnost významy také.)

  • Programy X11 používaly dlouhé možnosti, kterým předcházela jedna pomlčka nebo někdy znaménko plus:

    xterm -class FooTerm +vb -u8
    

    Tím nastavíte možnosti class a u8 a zruší nastavení vb možnost.

    Styl X11 je nekompatibilní se sdružováním možností.

  • Později byly do GNU getopt() přidány dlouhé volby způsobem, který je kompatibilní s jednopísmennými možnostmi.

    gpg -se --no-armor --output=signed.gpg
    

    Tím nastavíte -s , -e a --no-armor (což je opak --armor ).

    Obvykle --output=signed.gpg a --output signed.gpg jsou ekvivalentní. (Ale ne vždy – např. curl neakceptuje první, pouze druhé.)

    (Pokud si dobře vzpomínám, dlouhé možnosti používaly + jako předpona před tím, než byla změněna na -- .)

  • Specifikace POSIX má část Syntaxe argumentů nástroje, která popisuje možnosti s jedním znakem.

Většina programů pro Windows používá své vlastní analyzátory, což uživatele přivádí k šílenství.

  • Některé vyžadují /a /b /c , ostatní umožňují /a/b/c ve stylu VMS , ještě jiní preferují unixový styl /abc .
  • Většina používá / jako prefix, někteří také přijímají - , ostatní přijímají pouze - .
  • Hodnoty lze zadat jako /foo bar , /foo=bar , /foo:bar .
  • Mezery mohou být obvykle /quoted "like this" , ale některé programy používají " jako doslovná postava. (Toto je nevýhoda toho, že program necháte rozdělovat vlastní slova; v Unixu to řeší shell.)
  • Programy napříč platformami mohou používat implementaci getopt .

Obecně se první vyskytuje ve starších programech, které jsou příliš dobře zakořeněné na to, aby je bylo možné změnit. Tyto druhy dlouhých voleb nejsou kompatibilní se standardním getopt() funkce.

Druhý styl byl představen GNU getopt_long() a je v souladu se stávajícími standardy, které očekávají, že první styl bude spojen s krátkými možnostmi (tj. -orange očekává se, že bude znamenat -o -r -a -n -g -e ). Tento styl dlouhé možnosti je silně preferován.


Linux
  1. Enpass – The Perfect One Password Alternative zdarma

  2. V čem je kouzlo - (pomlčka) v parametrech příkazového řádku?

  3. K čemu slouží možnost „soname“ pro vytváření sdílených knihoven?

  1. Co je ekvivalentní příkazu Linux File pro Windows?

  2. Co dělá ENV („_“) pro ochranu před laděním?

  3. Co může způsobit, že předání init=/cesta/k/programu do jádra nespustí program jako init?

  1. Co tvoří „pole“ pro příkaz cut?

  2. Jaký je rozdíl mezi volbami -g a -G v useradd

  3. Co je nástroj syslog pro auditované protokoly?