GNU/Linux >> Znalost Linux >  >> Linux

Jaký je rozdíl mezi jednou a dvěma pomlčkami pro parametry příkazového řádku?

Neexistuje žádný rozšířený standard. Je tam určitá konzistence, např. v programech GNU, ale musíte zkontrolovat dokumentaci každého programu.

Cituji Wikipedii, zdůrazněte můj:

V systémech podobných Unixu se aSCII pomlčka–minus běžně používá k určení možností. Za znakem obvykle následuje jedno nebo více písmen . Argument, který je sám o sobě jedinou pomlčkou – mínus bez jakýchkoli písmen, obvykle určuje, že program by měl zpracovávat data přicházející ze standardního vstupu nebo odesílat data na standardní výstup. Dva pomlčky – mínus ( -- ) se v některých programech používají k určení „dlouhých možností“, kde se používají popisnější názvy možností . Toto je běžná vlastnost softwaru GNU.

Pomlčky obvykle označují předdefinovaný argument. Myslím, že se používá k jejich odlišení např. názvy souborů nebo jiné štítky, které můžete použít jako argumenty. To však není vždy případ (viz níže).

Často najdete stejný argument jako short i long option, jako např. v ls.

Některé programy používají jednu pomlčku pro jednoznakové možnosti a dvě pomlčky pro víceznakové možnosti, ale ne všechny (GNU find přijde na mysl). Některé programy mají volitelné pomlčky nebo je úplně přeskakují (tar nebo BSD ps mě napadá).

Někdy dlouhé možnosti (--foo ) vyžadují argumenty, zatímco krátké možnosti (-f ) ne (nebo alespoň naznačují konkrétní výchozí argument).

Krátké možnosti (např. cut -d ' ' ) může mít argumenty , zatímco dlouhé možnosti (např. ls --all ) nemusí nutně mít.

Chcete-li nastavit konkrétní chování programu, musíte někdy použít krátkou volbu, pro jiné musíte použít dlouhou volbu a u některých máte na výběr.

Související poznámka:některé programy nedokážou zpracovat žádné mezery mezi možností a jejím argumentem, zatímco jiné ne.

Jak jsem psal na začátku, prostě neexistuje žádné běžné chování nebo standard. Často můžete vysledovat podobné chování ve stejné knihovně používané pro analýzu argumentů, ale pravděpodobně nebudete chtít číst zdroje, abyste to zjistili.

Opravdu nemůžete odvodit syntaxi argumentů jednoho programu ze syntaxe jiného.

Pokud vezmete v úvahu také Windows, bude to ještě horší:Zatímco volání příkazového řádku Windows tradičně používají /f (alespoň většinou jednotlivé znaky) pro volby s : jako oddělovač mezi opcemi a jejich hodnotou (viz např. zde); multiplatformní nástroje jsou rozšířené (jako ty, které zmiňujete) a přinášejí běžnější syntaxi spojovníku pro argumenty se všemi výše zmíněnými nekonzistencemi.


Stačí udělat ls --help a podívejte se na možnosti; mělo by vám to být jasné.

Nemá to vůbec nic společného s parametry. Mnoho možností má krátký a dlouhý tvar a mnohé mají jeden a ne druhý.

A co se týče parametrů, je to prostě tak, že v dlouhém tvaru, když berou parametr, vypadá to, že je to vždy stejné. Ale očividně krátké mohou mít parametry stejně hodně; jen nepoužívají rovná se.

Zde je výňatek z ls --help (man ls poskytuje ekvivalentní informace). Všimněte si, že některé mají dlouhý tvar bez krátkého tvaru (--author , --block-size ), některé mají krátký tvar bez dlouhého tvaru (-c , -f , -g ) a některé mají jak dlouhý, tak krátký tvar (-A /--almost-all , -b /--escape ).

 -a, --all                  do not ignore entries starting with .
 -A, --almost-all           do not list implied . and ..
     --author               with -l, print the author of each file
 -b, --escape               print octal escapes for nongraphic characters
     --block-size=SIZE      use SIZE-byte blocks
 -B, --ignore-backups       do not list implied entries ending with ~
 -c                         with -lt: sort by, and show, ctime (time of last
                              modification of file status information)
                              with -l: show ctime and sort by name
                              otherwise: sort by ctime
 -C                         list entries by columns
     --color[=WHEN]         control whether color is used to distinguish file
                              types.  WHEN may be `never', `always', or `auto'

Toto je konvence pocházející z *nix. Pokud jsou možnosti úplné, předchází se dvojitá pomlčka , , zatímco jedna pomlčka předchází možnosti, pokud jsou napsány ve zkrácené podobě . Například ls --all --l , lze zkrátit na ls -al . Jak je vidět, ne všechny možnosti mají své jednopísmenné ekvivalenty, ačkoli více používané obvykle mají.

To, zda opce převezme argument, ve skutečnosti nehraje roli – buď je může vzít, nebo ne, bez ohledu na způsob zadání opce.

Při jejich zápisu pro jednorázové použití je to celkem jedno, ale při psaní příkazů např. do .alias souborů je zvykem používat plnou formu. Čistě pro usnadnění čtení pro další osobu.


Linux
  1. Jaký je rozdíl mezi InnoDB a MyISAM?

  2. Jaký je rozdíl mezi příkazem locate a find v Linuxu

  3. Jaký je rozdíl mezi volbami -i a -U použitými v příkazu rpm v Linuxu

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

  2. Jaký je rozdíl mezi unlink a rm?

  3. Jaký je rozdíl mezi trasou a ip trasou?

  1. Jaký je rozdíl mezi strtok_r a strtok_s v C?

  2. Jaký je rozdíl mezi fsck a e2fsck?

  3. Jaký je rozdíl mezi &> a >&v bash?