GNU/Linux >> Znalost Linux >  >> Linux

Jaké jsou speciální parametry/proměnné (bash) Shell?

Našel jsem nějaký speciální parametr s Bash začínajícím $ podepsat. Příklad:Když jsem hledal stav ukončení, věděl jsem o $? , ID procesu podle $$ atd.

Takže sdílím tento příspěvek, abyste věděli, které jsou speciální parametry bash (shell) a jejich použití.

Přijatá odpověď:

Viz 3.4.2 Speciální parametry z Bash Reference Manual.

Speciální parametry:

  • $*

($*) Rozbalí se na poziční parametry, počínaje od jedné. Pokud rozšíření není v uvozovkách, každý poziční parametr se rozšíří na samostatné slovo. V kontextech, kde se provádí, jsou tato slova předmětem dalšího dělení slov a rozšiřování názvu cesty. Když dojde k rozšíření v uvozovkách, rozvine se na jedno slovo s hodnotou každého parametru oddělenou prvním znakem speciální proměnné IFS. To znamená, že „$*“ je ekvivalentní „$1c$2c…“, kde c je první znak hodnoty proměnné IFS. Pokud není IFS nastaveno, jsou parametry odděleny mezerami. Pokud je IFS null, parametry se spojí bez zasahujících oddělovačů.

  • [e-mail chráněn]

([email protected]) Rozbalí se na poziční parametry, počínaje jedničkou. Když dojde k rozšíření ve dvojitých uvozovkách, každý parametr se rozšíří na samostatné slovo. To znamená, že „[email protected]“ je ekvivalentní „$1“ „$2“ …. Pokud se ve slově vyskytuje rozšíření v uvozovkách, rozšíření prvního parametru se spojí s počáteční částí původního slova a rozšíření posledního parametru se spojí s poslední částí původního slova. Pokud neexistují žádné poziční parametry, „[email protected]“ a [email protected] se rozbalí na nic (tj. budou odstraněny).

  • ##

($#) Rozšiřuje se na počet pozičních parametrů v desítkové soustavě.

  • $?

($?) Rozbalí se na stav ukončení naposledy provedeného potrubí v popředí.

  • $-

($-, pomlčka.) Rozbalí se na aktuální parametry volby, jak je specifikováno při vyvolání, příkazem set builtin, nebo parametry nastavené samotným shellem (jako je volba -i).

  • $$

($$) Rozbalí se na ID procesu shellu. V () subshell se rozšiřuje na ID procesu vyvolávacího shellu, nikoli na subshell.

  • $!

($!) Expanduje na ID procesu úlohy, která byla naposledy umístěna na pozadí, ať už byla provedena jako asynchronní příkaz nebo pomocí vestavěného bg (viz Job Control Builtins).

  • 0 $

($0) Rozbalí se na název shellu nebo skriptu shellu. Toto se nastavuje při inicializaci shellu. Pokud je Bash vyvolán se souborem příkazů (viz Shell Scripts), $0 je nastaveno na název tohoto souboru. Pokud je Bash spuštěn s volbou -c (viz Vyvolání Bash), pak je $0 nastaven na první argument po řetězci, který se má provést, pokud je přítomen. Jinak je nastaven na název souboru použitý k vyvolání Bash, jak je dáno argumentem nula.

To lze také vytisknout z manuálové stránky bash:

$ man bash | awk '/Special Parameters$/','/Shell Variables$/'

Výše uvedené jsou stejné jako speciální parametry definované POSIX.

Související:Co dělá „set -f“ v Korn Shell?

Navíc jsou zde poziční parametry $1 , $2 , … které obsahují argumenty příkazového řádku pro shell nebo aktuální funkci (3.4.1 Polohové parametry). Jsou také funkcí POSIX.

Starší verze Bash také uváděly $_ jako speciální parametr, ale nyní je uveden mezi dalšími proměnnými nastavenými shellem (5.2 Bash Variables). $_ není POSIX a ostatní shelly jej nemusí podporovat.

  • $_

($_ , podtržítko.) Při spuštění shellu nastavte absolutní cestu použitou k vyvolání shellu nebo skriptu shellu, který se provádí tak, jak je předán v prostředí nebo seznamu argumentů. Následně se po expanzi rozbalí na poslední argument předchozího příkazu. Nastavte také na úplnou cestu použitou k vyvolání každého příkazu provedeného a umístěného v prostředí exportovaném do tohoto příkazu. Při kontrole pošty tento parametr obsahuje název souboru pošty.


Linux
  1. Přizpůsobení prostředí Bash

  2. Který Shell Interpreter spouští skript s No Shebang?

  3. Existují konvence pojmenování proměnných ve skriptech Shell?

  1. Rozdíl mezi proměnnými Shell, které se exportují, a těmi, které nejsou v Bash?

  2. Jsou proměnné mimo prostředí předány do podslupky vyvolány substitucí příkazů?

  3. Chápete význam `$_`?

  1. Funkce v proměnných Shell?

  2. Sdílení proměnných ve více skriptech Shell?

  3. Jak získat Tty ve kterém Bash běží?