Bash - příkaz Linux - příkaz Unix

NÁZEV

bash - GNU Bourne-Again Shell

SYNOPSE

bash [možnosti] [soubor]

POPIS

Bash je překladatel příkazového jazyka kompatibilní s jazykem sh, který provádí příkazy čtené ze standardního vstupu nebo ze souboru. Bash také obsahuje užitečné funkce z shellů Korn a C ( ksh a csh ).

Bash je určen jako vyhovující implementace specifikace IEEE POSIX Shell and Tools (IEEE Working Group 1003.2).

MOŽNOSTI

Kromě voleb jednoho znakového shellu dokumentovaných v popisu příkazu vestavěného příkazu bash interpretuje při vyvolání následující volby:

-c řetězec

Pokud je k dispozici volba -c , jsou příkazy čteny z řetězce . Pokud existují argumenty po řetězci , jsou přiřazeny polohovým parametrům, počínaje hodnotou $ 0 .

-i

Pokud je k dispozici volba -i , shell je interaktivní .

-l

Proveďte, jak se bash chová jako přihlašovací shell (viz INVOCATION níže).

-r

Pokud je k dispozici volba -r , obal se stává omezen (viz část RESTRICTED SHELL níže).

-s

Pokud je k dispozici možnost -s nebo pokud po zpracování opce nezůstávají žádné argumenty, budou se číst příkazy ze standardního vstupu. Tato volba umožňuje nastavit polohové parametry při vyvolání interaktivního shellu.

-D

Seznam všech dvojitých řetězců předcházejících $ je vytištěn na standardním výstupu. Jedná se o řetězce, které jsou předmětem jazykového překladu, pokud aktuální prostředí není C nebo POSIX . To znamená, že volba -n ; žádné příkazy nebudou spuštěny.

[- +] O [ shopt_option ]

shopt_option je jedna z možností shellu přijatých šifrovaným vestavěným (viz SHELL BUILTIN COMMANDS níže). Je-li přítomen prvek shopt_option , -O nastaví hodnotu této možnosti; + O to odešle. Není-li soubor shopt_option přiložen, jsou na standardním výstupu vytištěny názvy a hodnoty možností shellu přijatých uživatelem. Pokud je volba vyvolání + O , výstup se zobrazí ve formátu, který může být jako vstup opět použit.

-

A - signalizuje konec možností a zakáže další zpracování volby. Jakékoliv argumenty po - jsou považovány za názvy souborů a argumentů. Argument - je ekvivalentní - .

Bash také interpretuje řadu možností s více znaky. Tyto volby se musí zobrazit na příkazovém řádku předtím, než budou rozpoznány jednotlivé znaky.

- dump-po-strings

Ekvivalentní k -D , ale výstup je ve formátu GNU gettext po (přenosný objekt).

--dump-strings

Ekvivalentní k -D .

--Pomoc

Zobrazte zprávu o použití na standardním výstupu a úspěšně ukončete.

- soubor souboru

- soubor rcfile

Spusťte příkazy ze souboru namísto standardního osobního inicializačního souboru ~ / .bashrc, pokud je shell interaktivní (viz INVOCATION níže).

--přihlásit se

Ekvivalentní hodnotě -l .

--noedit

Nepoužívejte knihovnu readline GNU pro čtení příkazových řádků, pokud je shell interaktivní.

- noprofile

Nečtěte souborový soubor / etc / profile ani žádný z osobních inicializačních souborů ~ / .bash_profile , ~ / .bash_login nebo ~ / .profile . Ve výchozím nastavení bash přečte tyto soubory, když je vyvolává jako přihlašovací shell (viz INVOCATION níže).

- ne

Nečtěte a nespouštějte osobní inicializační soubor ~ / .bashrc, pokud je shell interaktivní. Tato volba je ve výchozím nastavení zapnuta, pokud je shell vyvolán jako sh .

--posix

Změňte chování bash, kde se výchozí operace liší od standardu POSIX 1003.2 tak, aby odpovídala standardu ( režim posix ).

--omezený

Obal se stává omezen (viz část RESTRICTED SHELL níže).

--rpm - vyžaduje

Vytvořte seznam souborů, které jsou nutné pro spuštění skriptu prostředí. To znamená '-n' a podléhá stejným omezením jako kontrolní kontrola chyby při kompilaci; Základy, [] testy a evals nejsou analyzovány, takže některé závislosti mohou být vynechány. --verbose Ekvivalentní k -v .

--verze

Zobrazit informace o verzi pro tuto instanci bash na standardním výstupu a úspěšně ukončit.

ARGUMENTY

Pokud zůstávají argumenty po zpracování opcí a nebyla dodána ani volba -c ani -s , předpokládá se, že první argument je název souboru obsahující příkazy shellu. Pokud je vyvoláno bash tímto způsobem, $ 0 je nastaveno na název souboru a polohové parametry jsou nastaveny na zbývající argumenty. Bash přečte a spouští příkazy z tohoto souboru a potom se ukončí. Bashův stav ukončení je stav ukončení posledního příkazu provedeného ve skriptu. Pokud nejsou spuštěny žádné příkazy, stav ukončení je 0. Nejprve se provede pokus o otevření souboru v aktuálním adresáři a pokud není nalezen žádný soubor, pak shell vyhledá adresáře ve formátu PATH pro skript.

INVOCATION

Přihlašovací shell je prvek, jehož první znak argumentu nula je - nebo začal s volbou --login .

Interaktivní shell je začátek bez argumentů bez volby a bez možnosti -c, jejichž standardní vstup a výstup jsou oba připojeny ke svorkám (jak je stanoveno isatty (3)), nebo jedna začíná volbou -i . PS1 je nastaven a $ - zahrnuje i, pokud je bash interaktivní, což skriptovací shell nebo spouštěcí soubor testuje tento stav.

Následující odstavce popisují, jak bash spouští spouštěcí soubory. Pokud některý ze souborů existuje, ale nelze je číst, bash hlásí chybu. Tildy jsou rozšiřovány v názvech souborů, jak je popsáno níže v části Rozšíření Tilde v části EXPANSION .

Když je bash vyvolána jako interaktivní přihlašovací shell nebo jako neinteraktivní shell s volbou --login , nejprve přečte a provede příkazy ze souboru / etc / profile , pokud existuje soubor. Po přečtení souboru vyhledá ~ / .bash_profile , ~ / .bash_login a ~ / .profile v tomto pořadí a čte a spouští příkazy z prvního, který existuje a je čitelný. Možnost -noprofile může být použita, když shell začal tento způsob chování zabránit.

Když se ukončí přihlašovací shell, bash přečte a provede příkazy ze souboru ~ / .bash_logout , pokud existuje.

Když je spuštěn interaktivní shell, který není přihlašovací shell, bash přečte a provede příkazy ze souboru ~ / .bashrc , pokud existuje soubor. To může být potlačeno použitím možnosti --norc . Možnost souboru --rcfile vynutí příkaz bash číst a spouštět příkazy ze souboru namísto ~ / .bashrc .

Když je bash spuštěn neinteraktivně, spustit skript shellu například hledá proměnnou BASH_ENV v prostředí, rozšiřuje svou hodnotu, pokud se tam zobrazuje a použije rozšířenou hodnotu jako název souboru pro čtení a spuštění . Bash se chová, jako kdyby byl proveden následující příkaz:

pokud [-n "$ BASH_ENV"]; pak . "$ BASH_ENV"; fi

ale hodnota proměnné PATH se nepoužívá k vyhledání názvu souboru.

Pokud je bash vyvolán jménem sh , pokusí se napodobit spouštěcí chování historických verzí sh co nejblíže, a to i v souladu se standardem POSIX. Když je vyvolána jako interaktivní přihlašovací shell nebo neinteraktivní shell s volbou --login , nejprve se pokusí číst a spouštět příkazy z / etc / profile a ~ / .profile v tomto pořadí. Možnost - noprofile může být použita k potlačení tohoto chování. Když se objeví jako interaktivní shell se jménem sh , bash hledá proměnnou ENV , rozšiřuje svou hodnotu, pokud je definována, a používá rozšířenou hodnotu jako název souboru pro čtení a spuštění. Vzhledem k tomu, že shell vyvolaný jako sh se nepokouší číst a provádět příkazy z jiných spouštěcích souborů, volba --rcfile nemá žádný vliv. Neinteraktivní shell vyvolaný názvem sh se nepokusí číst žádné další spouštěcí soubory. Při vyvolání jako sh , bash vstoupí do režimu posix po čtení spouštěcích souborů.

Když je bash spuštěn v posixovém režimu, stejně jako u možnosti příkazového řádku - posix , postupuje podle standardu POSIX pro spouštěcí soubory. V tomto režimu interaktivní shelly rozšiřují proměnnou ENV a příkazy jsou přečteny a spuštěny ze souboru, jehož jméno je rozšířená hodnota. Žádné další spouštěcí soubory nejsou čteny.

Bash se pokusí zjistit, kdy je spuštěn démonem vzdáleného shellu, obvykle rshd . Pokud bash určuje, že je spuštěn rshd , čte a spouští příkazy z ~ / .bashrc , pokud tento soubor existuje a je čitelný. Nebude to dělat, pokud je vyvoláno jako sh . Možnost -norc může být použita k potlačení tohoto chování a volba --rcfile může být použita k vynucení jiného souboru, který má být čten, ale rshd obecně nevyvolá shell s těmito možnostmi nebo jim umožňuje zadat.

Pokud je shell spuštěn s efektivní uživatelskou (skupinou) id, která se nerovná skutečnému uživateli (skupině) id a volba -p není dodána, nejsou čtené spouštěcí soubory, funkce shellu nejsou zděděny z prostředí, SHELLOPTS proměnná, pokud se objeví v prostředí, je ignorována a efektivní ID uživatele je nastaveno na skutečné ID uživatele. Pokud je volba -p dodána při vyvolání, chování při spuštění je stejné, ale efektivní ID uživatele není resetováno.

DEFINICE

Následující definice se používají po celý zbytek tohoto dokumentu.

prázdný

Mezeru nebo kartu.

slovo

Sekvence znaků považovaných za shell jako jednu jednotku. Také známý jako token .

název

Slovo skládající se pouze z alfanumerických znaků a podtržítek a začínající abecedním znakem nebo podtržítkem. Označuje se také jako identifikátor .

metacharakter

Charakter, který při nekotazování odděluje slova. Jeden z následujících způsobů:

| &; () <> mezeru

řídícího operátora

Token, který provádí řídicí funkci. Jedná se o jeden z následujících symbolů:

|| & &&; ;; () |

REZERVOVANÉ SLOVÁ

Vyhrazená slova jsou slova, která mají zvláštní význam pro shell. Následující slova jsou rozpoznána jako vyhrazená pro nekotazování a buď první slovo jednoduchého příkazu (viz SHELL GRAMMAR níže) nebo třetí slovo případu nebo pro příkaz:

! case do proveďte elif else esac fi pro funkci jestliže ve výběru pak do dokud {} time [[]]

SHELL GRAMMAR

Jednoduché příkazy

Jednoduchým příkazem je posloupnost volitelných proměnných přiřazení, následovaná prázdnými oddělenými slovy a přesměrováním a ukončena řídícím operátorem . První slovo určuje příkaz, který má být proveden, a předává se jako argument nula. Zbývající slova jsou předána jako argumenty pro vyvolaný příkaz.

Vrácená hodnota jednoduchého příkazu je jeho stav ukončení nebo 128 + n, pokud je příkaz ukončen signálem n .

Potrubí

Potrubí je posloupnost jednoho nebo více příkazů oddělených znakem | . Formát potrubí je:

[ čas [ -p ]] [! ] příkaz [ | command2 ...]

Standardní výstup příkazu je připojen přes potrubí ke standardnímu vstupu příkazu2 . Toto spojení se provádí před jakýmkoli přesměrováním určeným příkazem (viz níže REDIRECTION ).

Pokud rezervované slovo ! předchází potrubí, výstupní stav tohoto potrubí je logickým NOT stavu výstupu posledního příkazu. V opačném případě je stav potrubí stav výstupu posledního příkazu. Shell čeká na to, aby všechny příkazy v potrubí skončily před návratem hodnoty.

Pokud časově vyhrazené slovo předchází potrubí, uplynulo uplynulý čas, stejně jako uživatelský a systémový čas spotřebovaný jeho provedením, když se potrubí ukončí. Možnost -p změní výstupní formát na formát určený modulem POSIX. Proměnná TIMEFORMAT může být nastavena na formátovací řetězec, který určuje, jak mají být informace o časování zobrazeny. viz popis TIMEFORMAT v rámci proměnných Shell níže.

Každý příkaz v potrubí je spuštěn jako samostatný proces (tj. V subshell).

Seznamy

Seznam je sekvence jednoho nebo více potrubí oddělených jedním z operátorů ; , & , && , nebo || , a případně ukončena jedním z ; , & , nebo .

Z těchto seznamů operátorů, && a || mají stejnou přednost, následuje ; a &, které mají stejnou přednost.

Sekvence jednoho nebo více řádků se může objevit v seznamu místo středníkem pro vymezení příkazů.

Pokud příkaz ukončí operátor & & , shell provede příkaz v pozadí v subshell. Shell nečeká, až příkaz skončí a stav návratu je 0. Příkazy oddělené a ; jsou prováděny postupně; skořápka čeká, aby se každý příkaz ukončil. Stav návratu je stav ukončení posledního příkazu.

Řídicí operátoři && a || označte seznamy A a seznamy OR, resp. Seznam AND obsahuje formulář

command1 && command2

příkaz2 je spuštěn v případě a pouze v případě, že příkaz1 vrátí stav ukončení nula.

Seznam OR obsahuje formulář

command1 || command2

příkaz2 je spuštěn a pouze pokud příkaz1 vrátí stav nenulového výstupu. Stav návratů seznamů AND a OR je stav ukončení posledního příkazu provedeného v seznamu.

Složené příkazy

Příkaz složený je jeden z následujících:

( seznam )

seznam je spuštěn v subshell. Variabilní přiřazení a vestavěné příkazy, které ovlivňují prostředí shellu, nezůstávají v platnosti po dokončení příkazu. Stav návratu je stav ukončení seznamu .

{ list ; }}

seznam je jednoduše spuštěn v aktuálním shellu prostředí. seznam musí být ukončen novým řádkem nebo středníkem. Toto je známé jako příkaz skupiny . Stav návratu je stav ukončení seznamu . Všimněte si, že na rozdíl od metaznaček ( a ) jsou { a } rezervovaná slova a musí se vyskytnout tam, kde je dovoleno rozpoznat vyhrazené slovo. Vzhledem k tomu, že nespouštějí slovo, musí být odděleny od seznamu podle mezery.

(( výraz ))

Výraz je vyhodnocen podle pravidel popsaných níže v ARITMETICKÉ HODNOCENÍ . Pokud je hodnota výrazu nenulová, stav návratu je 0; jinak je stav návratu 1. To je přesně ekvivalentní podmínce nechat " výraz ".

[[ výraz ]]

Vrátit stav 0 nebo 1 v závislosti na hodnocení výrazu podmíněného výrazu . Výrazy se skládají z primárních prvků popsaných v části PODMÍNĚNÉ VYJÁDŘENÍ . Rozšíření slov a rozšiřování názvů cest se neprovádí na slova mezi [[ a ]] ; rozšíření tilde, parametr a variabilní expanze, aritmetická expanze, náhrada příkazu, nahrazení procesu a odebrání citátu.

Když se používají operátoři == a ! = , Řetězec napravo od operátora se považuje za vzor a odpovídá podle pravidel popsaných níže v části Pattern Matching . Hodnota návratu je 0, pokud řetězec odpovídá nebo nesouhlasí se vzorem a 1 jinak. Každá část vzoru může být citována tak, aby byla přiměřená jako řetězec.

Výrazy lze kombinovat pomocí následujících operátorů, jejichž seznam je uveden v sestupném pořadí:

( výraz )

Vrací hodnotu výrazu . To může být použito k překonání běžných priorit operátorů.

! výraz

Je pravdivé, pokud je výraz falešný.

výraz1 && výraz2

Je pravda, zda jsou pravdivé jak výraz1, tak výraz2 .

výraz1 || výraz2 Je pravda, zda je buď true1 nebo výraz2 true.

&& a || operátoři nehodnotí výraz2, jestliže hodnota výrazu 1 postačuje k určení návratové hodnoty celého podmíněného výrazu.

pro jméno [ ve slově ]; do seznamu ; Hotovo

Zobrazí se seznam slov, která následují, a generuje seznam položek. Název proměnné je nastaven na každý prvek v tomto seznamu a seznam je proveden pokaždé. Pokud je slovo vynecháno, příkaz pro proběhne jedenkrát pro každý nastavený poziční parametr (viz PARAMETRY níže). Stav návratu je stav ukončení posledního příkazu, který se provede. Pokud rozšíření položek, které následují ve výsledcích v prázdném seznamu, nejsou provedeny žádné příkazy a stav návratu je 0.

pro (( expr1 ; expr2 ; exp3 )); do seznamu ; Hotovo

Nejprve je aritmetický výraz expr1 vyhodnocen podle pravidel popsaných níže v ARITMETICKÉ HODNOCENÍ . Arrmetický výraz expr2 se potom vyhodnocuje opakovaně, dokud se nehodnotí. Pokaždé, když expr2 vyhodnotí nenulovou hodnotu, provede se seznam a vyhodnotí aritmetický výraz expr3 . Pokud je některý výraz vynechán, chová se, jako by to vyhodnotil na hodnotu 1. Zpětná hodnota je stav ukončení posledního příkazu v seznamu, který je spuštěn, nebo false, pokud některý z výrazů je neplatný.

vyberte jméno [ ve slově ]; do seznamu ; Hotovo

Zobrazí se seznam slov, která následují, a generuje seznam položek. Sada rozšířených slov je vytištěna na standardní chybě, z nichž každá předchází číslo. Pokud je slovo vynecháno, vytisknou se polohové parametry (viz PARAMETRY níže). Zobrazí se výzva PS3 a na standardním vstupu se čte řádek. Pokud se řádek skládá z čísla odpovídající jednomu z zobrazených slov, hodnota názvu je nastavena na toto slovo. Je-li řádek prázdný, zobrazí se znovu slova a výzva. Pokud se čte EOF, příkaz se dokončí. Jakákoli jiná hodnota čtení způsobí, že název je nastaven na hodnotu null. Čtení řádku je uloženo v proměnné REPLY . Seznam je proveden po každém výběru, dokud není proveden příkaz break . Stav ukončení výběru je stav ukončení posledního příkazu provedeného v seznamu nebo nula, pokud nebyly provedeny žádné příkazy.

případové slovo v [[(] vzoru [ | pattern ]

Příkaz příkazu nejdříve rozšiřuje slovo a pokusí se jej porovnávat s každým vzorem , a to pomocí stejných pravidel, která odpovídají rozšířením cesty (viz Rozbalit název cesty níže). Po nalezení shody se provede odpovídající seznam . Po prvním utkání se neprovádějí žádné další zápasy. Stav ukončení je nulový, pokud se nezobrazí žádný vzor. Jinak je to stav ukončení posledního příkazu provedeného v seznamu .

pokud je seznam ; pak seznam; [ seznam elifů ; pak seznam ; ] ... [ jiný seznam ; ] fi

Je- li seznam proveden. Pokud je stav ukončení nulový, provede se pak seznam . V opačném případě je každý seznam elifů proveden postupně a pokud jeho stav ukončení je nulový, provede se příslušný seznam a příkaz se dokončí. V opačném případě bude proveden jiný seznam , pokud je k dispozici. Stav ukončení je stav ukončení posledního příkazu, nebo nula, pokud není podmínka testována pravdivá.

zatímco seznam ; do seznamu ; Hotovo

do seznamu ; do seznamu ; Hotovo

Příkaz while zároveň nepřetržitě provádí seznam úkolů , dokud poslední příkaz v seznamu nevrátí stav ukončení. Příkaz until je totožný s příkazem while , kromě toho, že test je negován; seznam úkolů se provede, pokud poslední příkaz v seznamu vrátí stav nenulového ukončení. Stav ukončení okamžiku a do příkazů je stav ukončení posledního příkazu do seznamu proveden, nebo nula, pokud nebyl proveden žádný.

[ function ] jméno () { seznam ; }}

Definuje funkci s názvem název . Tělem funkce je seznam příkazů mezi {a}. Tento seznam se provádí vždy, když je jméno zadáno jako název jednoduchého příkazu. Stav ukončení funkce je stav ukončení posledního příkazu provedeného v těle. (Viz FUNKCE níže.)

POZNÁMKY

V neinteraktivním shellu nebo interaktivním shellu, ve kterém je povolena volba interactive_comments na vestavěnou šifru (viz SHELL BUILTIN COMMANDS below), slovo začínající znakem # způsobí, že slovo a všechny zbývající znaky na tomto řádku budou ignorovány. Interaktivní shell bez povolené funkce interactive_comments nepovoluje komentáře. Možnost interactive_comments je ve výchozím nastavení zapnuta v interaktivních shellů.

QUOTING

Citace se používá k odstranění zvláštního významu některých znaků nebo slov do shellu. Citace lze použít k vypnutí speciálního zpracování zvláštních znaků, k zabránění rozpoznání vyhrazených slov jako takových a k zabránění rozšíření parametrů.

Každý ze zmíněných metacharacterů uvedených pod DEFINICE má zvláštní význam pro shell a musí být citován, pokud se má reprezentovat.

Když se používá zařízení pro rozšiřování historie příkazů, obvykle se rozšiřuje povaha historie . , musí být citováno, aby se zabránilo rozšíření historie.

Existují tři mechanismy citování: znak útěku , jednoduché uvozovky a dvojité uvozovky.

Nekotované zpětné lomítko ( \ ) je znak escape . Zachovává se doslovná hodnota následujícího znaku, s výjimkou . Pokud se objeví pár \ a zpětné lomítko není samo o sobě citováno, \ se považuje za pokračování v řádku (to znamená, že je odebrán ze vstupního proudu a efektivně ignorováno).

Uložení znaků v jednoduchých uvozovkách zachovává literární hodnotu každého znaku v uvozovkách. Jedna citace nemusí nastat mezi jednotlivými uvozovkami, a to i v případě, že předchází zpětné lomítko.

Uložení znaků v dvojitých uvozovkách zachovává doslovnou hodnotu všech znaků v uvozovkách, s výjimkou $ , ` a \ . Postavy $ a ` zachovávají svůj zvláštní význam uvnitř dvojitých uvozovek. Zpětné lomítko si zachovává svůj zvláštní význam pouze tehdy, když následuje jeden z následujících znaků: $ , ` , ' , \ nebo . Dvojitá citace může být uvedena v rámci dvojitých uvozovek předcházejícím zpětným lomítkem.

Zvláštní parametry * a @ mají zvláštní význam při uvozovkách (viz PARAMETRY níže).

Slova ve tvaru $ ' string ' jsou zvlášť zpracovávána. Slovo se rozšiřuje na řetězec a zpětně lomené znaky se nahrazují podle specifikace normy ANSI C. Sekvence únikového lomítka, pokud jsou přítomny, jsou dekódovány následovně:

\A

upozornění (zvon)

\ b

backspace

\E

únikový znak

\F

form feed

\ n

nový řádek

\ r

návrat vozíku

\ t

horizontální záložka

\proti

vertikální záložku

\\

obrácené lomítko

\ '

jednoduchá citace

\ nnn

osmibitový znak, jehož hodnota je osmičková hodnota nnn (jedna až tři číslice)

\ x HH

osmibitový znak, jehož hodnota je hexadecimální hodnota HH (jedna nebo dvě hexadecimální číslice)

\ c x

řídicí znak x

Rozšířený výsledek je jednočinný, jako by nebyl přítomen dolarový znak.

Dvojkotčený řetězec, jehož předchází znak dolaru ( $ ), způsobí, že řetězec bude přeložen podle aktuálního národního prostředí. Je-li aktuální národní prostředí C nebo POSIX , znak dolaru je ignorován. Je-li řetězec přeložen a nahrazen, nahrazení je dvakrát citováno.

PARAMETRY

Parametr je entita, která ukládá hodnoty. Může to být jméno , číslo nebo některý ze speciálních znaků uvedených níže v části Speciální parametry . Pro účely shellu je proměnnou parametr označený jménem . Proměnná má hodnotu a nula nebo více atributů . Atributy jsou přiřazeny příkazem deklarovat vestavěný příkaz (viz níže v příkazu SHELL BUILTIN COMMANDS ).

Pokud je přiřazena hodnota, je nastaven parametr. Nulový řetězec je platná hodnota. Jakmile je proměnná nastavena, může být zrušena pouze pomocí příkazu unset builtin (viz SHELL BUILTIN COMMANDS níže).

Proměnné může být přiřazeno příkazem formuláře

název = [ hodnota ]

Pokud není zadána hodnota , proměnná je přiřazena nulovému řetězci. Všechny hodnoty procházejí rozšířením tilde, parametrem a variabilní expanzí, nahrazením příkazu, aritmetickou expanzí a odstraněním citace (viz EXPANSION níže). Pokud je proměnná nastavena jako celočíselný atribut, pak hodnota je předmětem aritmetické expanze, i když není použito rozšíření $ ((...)) (viz Aritmetické rozšíření níže). Rozdělení slov není provedeno, s výjimkou "$ @", jak je vysvětleno níže v části Speciální parametry . Rozšíření cesty není provedeno. Příkazy přiřazení mohou také vypadat jako argumenty příkazů pro deklarování , sjednocení , export , readonly a lokální vestavěné příkazy.

Polohové parametry

Pozicový parametr je parametr označený jednou nebo více číslicemi, s výjimkou jednoho číslice 0. Pozicionální parametry jsou při vyvolání argumentů shellu přiřazeny a mohou být znovu přiděleny pomocí příkazu vestavěného příkazu. Polohové parametry nesmí být přiřazeny příkazům přiřazení. Polohové parametry se dočasně vyměňují, když je provedena funkce shellu (viz FUNKCE níže).

Pokud se rozšiřuje polohový parametr skládající se z více než jedné číslice, musí být přiložen ve svincích (viz EXPANSION níže).

Zvláštní parametry

Skořepina zvlášť zpracovává několik parametrů. Tyto parametry lze odkazovat pouze; jejich přidělení není povoleno.

* * *

Rozbalí se na polohové parametry, počínaje jedním. Když expanze nastane v rámci dvojitých uvozovek, rozšiřuje se na jedno slovo s hodnotou každého parametru odděleného prvním znakem speciální proměnné IFS . To znamená, že " $ * " odpovídá hodnotě " $ 1 c $ 2 c ... ", kde c je první znak hodnoty proměnné IFS . Pokud je IFS zrušen, jsou parametry odděleny mezerami. Je-li IFS nulový, parametry jsou spojeny bez zasahujících separátorů.

@

Rozbalí se na polohové parametry, počínaje jedním. Když expanze nastane v rámci dvojitých uvozovek, každý parametr se rozbalí na samostatné slovo. To znamená, že " $ @ " je ekvivalentní hodnotě " $ 1 " " $ 2 " ... Pokud neexistují žádné poziční parametry, " $ @ " a $ @ se rozbalí na nic (tj. Jsou odstraněny).

#

Rozbalí se na počet polohových parametrů v desítkové soustavě.

?

Rozbalí se na stav posledně provedeného potrubí popředí.

-

Rozbalí se na příznaky aktuální volby, které byly zadány při vyvolání, nastaveným vestavěným příkazem nebo nastavením samotného shellu (například volba -i ).

$

Rozbalí se do ID procesu shellu. V subshell () se rozšíří na ID procesu aktuálního shellu, nikoliv na subshell.

!

Rozšiřuje se na ID procesu posledního příkazu na pozadí (asynchronní).

0

Rozbalí se na název skriptu shell nebo shellu. Toto je nastaveno na inicializaci shellu. Pokud je bash vyvolán se souborem příkazů, $ 0 je nastaveno na název daného souboru. Pokud je bash spuštěn s volbou -c , potom $ 0 je nastaven na první argument po řetězci, který má být proveden, pokud je přítomen. V opačném případě je nastavena na název souboru použitý pro vyvolání bash , jak je dáno nulovým argumentem.

_

Při spuštění shellu nastavte absolutní název souboru shellu nebo shell skriptu, který se provede jako předaný v seznamu argumentů. Následně se rozšíří na poslední argument předchozího příkazu. Také nastavte úplný název každého příkazu provedeného a umístěného do prostředí exportovaného do tohoto příkazu. Při kontrole pošty obsahuje tento parametr název aktuálně kontrolovaného souboru pošty.

Shell proměnné

Následující proměnné jsou nastaveny pomocí shellu:

BASH

Rozbalí se na úplný název souboru používaný k vyvolání této instance bash .

BASH_VERSINFO

Proměnná čtecí pole, jejíž členové obsahují informace o verzi pro tuto instanci bash . Hodnoty přiřazené členům pole jsou následující:

BASH_VERSINFO [ 0]

Hlavní číslo verze ( vydání ).

BASH_VERSINFO [ 1]

Menší číslo verze ( verze ).

BASH_VERSINFO [ 2]

Úroveň patchů.

BASH_VERSINFO [ 3]

Verze sestavení.

BASH_VERSINFO [ 4]

Stav uvolnění (např. Beta1 ).

BASH_VERSINFO [ 5]

Hodnota MACHTYPE .

BASH_VERSION

Rozbalí se na řetězec popisující verzi této instance bash .

COMP_CWORD

COMP_LINE

Aktuální příkazový řádek. Tato proměnná je k dispozici pouze v shell funkcích a externích příkazech vyvolaných programovatelnými zařízeními pro dokončení (viz Programovatelné dokončení níže).

COMP_POINT

COMP_WORDS

Proměnná pole (viz níže uvedené pole ) sestávající z jednotlivých slov v aktuálním příkazovém řádku. Tato proměnná je k dispozici pouze ve funkcích prostředí vyvolaných programovatelnými zařízeními pro dokončení (viz programovatelné vyplnění níže).

DIRSTACK

Proměnná pole (viz níže uvedené pole ) obsahující aktuální obsah zásobníku adresářů. Adresáře se objeví v zásobníku v pořadí, v jakém jsou zobrazeny vestavěné adresáře . Přiřazení členů této matice proměnné může být použito k úpravě adresářů, které jsou již v zásobníku, ale vestavěné pushd a popd musí být použity k přidávání a odebírání adresářů. Přiřazení této proměnné nezmění aktuální adresář. Pokud je služba DIRSTACK zrušena , ztratí své speciální vlastnosti, i když je následně resetována.

EUID

Rozbalí se na skutečné ID uživatele aktuálního uživatele, inicializované při spuštění shellu. Tato proměnná je readonly.

FUNCNAME

Název kterékoli aktuálně spouštějící funkce shellu. Tato proměnná existuje pouze při spuštění funkce shellu. Přiřazení do služby FUNCNAME nemají žádný vliv a vrátí chybový stav. Pokud je funkce FUNCNAME zrušena , ztratí své speciální vlastnosti, i když je následně resetována.

SKUPINY

Proměnná pole obsahující seznam skupin, jejichž členem je aktuální uživatel. Přiřazení do skupin nemá žádný vliv a vrátí chybový stav. Je-li GROUPS zrušeno, ztratí své speciální vlastnosti, i když je následně vynulováno.

HISTCMD

Číslo historie nebo index v seznamu historie aktuálního příkazu. Pokud je HISTCMD nenastaveno, ztrácí své speciální vlastnosti, i když je následně resetováno.

HOSTNAME

Automaticky nastavit název aktuálního hostitele.

HOSTTYPE

Automaticky nastavte řetězec, který jednoznačně popisuje typ stroje, na kterém se provádí bash . Výchozí nastavení je závislé na systému.

LINENO

Pokaždé, když je tento parametr odkazován, shell nahrazuje desetinné číslo představující aktuální sekvenční číslo (od 1) v rámci skriptu nebo funkce. Pokud není ve skriptu nebo v funkci, nenahrazuje záměna substituovaná hodnota. Pokud je LINENO nenastaveno, ztrácí své speciální vlastnosti, i když je následně resetováno.

MACHTYPE

Automaticky nastavte řetězec, který plně popisuje typ systému, na kterém se provádí bash , ve standardním formátu systému GNU cpu-company-system . Výchozí nastavení je závislé na systému.

OLDPWD

Předchozí pracovní adresář nastavený příkazem cd .

OPTARG

Hodnota argumentu poslední možnosti, kterou zpracoval příkaz getopts vestavěný (viz SHELL BUILTIN COMMANDS níže).

OPTIND

Index dalšího argumentu, který má zpracovat příkaz getopts vestavěný (viz SHELL BUILTIN COMMANDS níže).

OSTYPE

Automaticky nastavte řetězec, který popisuje operační systém, na kterém se provádí bash . Výchozí nastavení je závislé na systému.

PIPESTATUS

Proměnná pole (viz níže uvedené pole ) obsahující seznam hodnot stavu ukončení z procesů v nejčastěji prováděném potrubí popředí (který může obsahovat pouze jeden příkaz).

PPID

ID procesu rodičů shellu. Tato proměnná je readonly.

PWD

Aktuální pracovní adresář nastavený příkazem cd .

NÁHODNÝ

Pokaždé, když je tento parametr odkazován, generuje se náhodné celé číslo mezi 0 a 32767. Sekvence náhodných čísel může být inicializována přiřazením hodnoty RANDOM . Pokud je RANDOM nenastaveno, ztrácí své speciální vlastnosti, i když je následně resetováno.

ODPOVĚĎ

Nastavte na řádek vstupu, který čte příkaz čtení vložený, pokud nejsou dodány žádné argumenty.

SEKUNDY

Pokaždé, když je tento parametr odkazován, vrátí se počet sekund od vyvolání shellu. Pokud je hodnota přiřazena SECONDS , hodnota vrácená v následujících odkazů je počet sekund od přiřazení plus přiřazená hodnota. Je-li SECONDS nenastaveno, ztratí své speciální vlastnosti, i když je následně resetováno.

SHELLOPTS

Seznam povolených možností shellu oddělených dvojtečkou. Každé slovo v seznamu je platným argumentem pro volbu -o k zadanému vestavěnému příkazu (viz SHELL BUILTIN COMMANDS níže). Možnosti, které se objevují v SHELLOPTS, jsou ty, které jsou hlášeny jako zapnuté set -o . Pokud je tato proměnná v prostředí při spuštění bash , bude každá možnost shellu v seznamu aktivována před čtením všech spouštěcích souborů. Tato proměnná je pouze pro čtení.

SHLVL

Zvýšená jednou při každém spuštění instance bash .

UID

Rozbalí se na uživatelské ID aktuálního uživatele, inicializované při spuštění shellu. Tato proměnná je readonly.

Následující proměnné používá shell. V některých případech přidává bash výchozí hodnotu proměnné; tyto případy jsou uvedeny níže.

BASH_ENV

Pokud je tento parametr nastaven při provádění příkazu bash skriptovacího skriptu, jeho hodnota se interpretuje jako název souboru obsahující příkazy pro inicializaci shellu, jako v ~ / .bashrc . Hodnota BASH_ENV je podrobena rozšíření parametru, nahrazení příkazu a aritmetické rozšíření předtím, než bude interpretována jako název souboru. PATH se nepoužívá k vyhledání výsledného názvu souboru.

CDPATH

Vyhledávací cesta pro příkaz cd . Jedná se o seznam adresářů oddělených dvojtečkami, ve kterých shell hledá cílové adresáře zadané příkazem cd . Hodnota vzorku je ".: ~: / Usr".

Sloupce

Při výběru vestavěného příkazu slouží k určení šířky terminálu při tisku seznamů výběru. Automaticky nastavit po obdržení SIGWINCH.

COMPREPLY

Proměnná pole, ze které bash přečte možné komplexy generované funkcí shell vyvolanou programovatelným dokončovacím zařízením (viz Programovatelné dokončení níže).

FCEDIT

Výchozí editor pro příkaz fc builtin.

FIGNORE

Soubor přípon oddělených dvojtečkou, který chcete ignorovat při dokončení názvu souboru (viz část READLINE níže). Název souboru, jehož přípona se shoduje s některou z položek v souboru FIGNORE, je ze seznamu odpovídajících názvů souborů vyloučena. Hodnota vzorku je ".o: ~".

GLOBIGNORE

Seznam vzorců oddělených dvojtečkami, které definují soubor názvů souborů, které mají být ignorovány rozšířením názvu cesty. Pokud je název souboru odpovídající vzoru rozšíření cesty také shodný s jedním ze vzorků v GLOBIGNORE , je odstraněn ze seznamu shody.

HISTCONTROL

Pokud je nastavena hodnota ignorespace , řádky, které začínají znakem mezery, nejsou zadány v seznamu historie. Pokud je nastavena hodnota ignoredups , nebudou zadány řádky, které odpovídají poslednímu řádku historie. Hodnota ignoreboth kombinuje dvě možnosti. Pokud je tato hodnota zrušena nebo je nastavena na jinou hodnotu než výše, všechny řádky přečtené analyzátorem jsou uloženy v seznamu historie podle hodnoty HISTIGNORE . Funkci této proměnné nahrazuje HISTIGNORE . Druhý a následující řádek složeného příkazu pro více řádků nejsou testovány a jsou přidány do historie bez ohledu na hodnotu HISTCONTROL .

HISTFILE

Název souboru, ve kterém je historie příkazů uložena (viz HISTORIE níže). Výchozí hodnota je ~ / .bash_history . Pokud je tato volba zrušena, historie příkazů není uložena při ukončení interaktivního shellu.

HISTFILESIZE

Maximální počet řádků obsažených v souboru historie. Pokud je této proměnné přiřazena hodnota, soubor historie je v případě potřeby zkrácen, aby obsahoval více než tento počet řádků. Výchozí hodnota je 500. Soubor historie je také zkrácen na tuto velikost po zápisu při ukončení interaktivního shellu.

HISTIGNORE

Rozbalovací seznam oddělených dvojtečkami, který se používá k určení, které příkazové řádky mají být uloženy v seznamu historie. Každý vzorek je ukotven na začátku řádku a musí odpovídat celé řadě (není připojen implicitní ` * '). Každý vzorek je testován na linii po uplatnění kontrol určených metodou HISTCONTROL . Kromě znaků odpovídajících znakům shodného typu se znaky ` & 'shodují s předchozím řádkem historie. ` & 'může uniknout zpětným lomítkem; zpětné lomítko je před pokusem o zápas odstraněno. Druhý a následující řádky složeného příkazu s více řádky nejsou testovány a jsou přidány do historie bez ohledu na hodnotu HISTIGNORE .

HISTSIZE

Počet příkazů zapamatovatelných v historii příkazů (viz HISTORIE níže). Výchozí hodnota je 500.

DOMOV

Domovský adresář aktuálního uživatele; výchozí argument pro příkaz cd vestavěný. Hodnota této proměnné je také použita při provádění rozšíření tilde.

HOSTFILE

Obsahuje název souboru ve stejném formátu jako / etc / hosts, který by měl být čten, když shell potřebuje dokončit název hostitele. Seznam možných dokončení názvu hostitele může být změněn během spouštění shellu; při dalším pokusu o dokončení názvu hostitele po změně hodnoty, bash přidá obsah nového souboru do existujícího seznamu. Je-li HOSTFILE nastaven, ale nemá žádnou hodnotu, pokusy bash o čtení / etc / hosts získá seznam možných dokončení názvu hostitele. Když je soubor HOSTFILE nenastaven, seznam hostitele se vymaže.

IFS

Interní oddělovač polí, který se používá pro rozdělení slov po rozšíření a pro rozdělení řádků do slov s vkládaným vkládaným příkazem. Výchozí hodnota je `` ''.

IGNOREEOF

Ovládá činnost interaktivního shellu po přijetí znaku EOF jako jediného vstupu. Pokud je hodnota nastavena, je hodnota po sobě jdoucích znaků EOF, které musí být zadány jako první znaky na vstupním řádku před ukončením bash . Pokud proměnná existuje, ale nemá číselnou hodnotu nebo nemá žádnou hodnotu, výchozí hodnota je 10. Pokud neexistuje, znamená EOF konec vstupu do shellu.

INPUTRC

Název souboru pro spouštěcí soubor readline , přepsat výchozí ~ / .inputrc (viz READLINE níže).

LANG

Používá se k určení kategorie prostředí pro libovolnou kategorii, která není specificky vybrána s proměnnou začínající na LC_ .

LC_ALL

Tato proměnná převádí hodnotu LANG a libovolné jiné proměnné LC_ určující kategorii národního prostředí.

LC_COLLATE

Tato proměnná určuje pořadí řazení použité při třídění výsledků rozšíření cesty a určuje chování rozsahových výrazů, tříd ekvivalence a sekvencí řazení v rámci rozšíření cesty a porovnání vzorků.

LC_CTYPE

Tato proměnná určuje interpretaci znaků a chování tříd znaků v rámci rozšíření cesty a porovnání vzoru.

LC_MESSAGES

Tato proměnná určuje národní prostředí použité k překladu dvojitých řetězců, kterým předchází hodnota $ .

LC_NUMERIC

Tato proměnná určuje kategorii národního prostředí použitou pro formátování čísel.

LINKY

Použitím příkazu vybrat vestavěný příkaz určte délku sloupce pro tisk výběrových seznamů. Automaticky nastavit po obdržení SIGWINCH.

POŠTA

Pokud je tento parametr nastaven na název souboru a proměnná MAILPATH není nastavena, bash informuje uživatele o příchodu pošty do zadaného souboru.

MAILCHECK

Určuje, jak často (v sekundách) bash kontroluje poštu. Výchozí hodnota je 60 sekund. Když je čas zkontrolovat poštu, shell to provede před zobrazením primárního dotazu. Pokud je tato proměnná zrušena nebo je nastavena na hodnotu, která není větší nebo rovna nule, pak shell zakázá kontrolu pošty.

MAILPATH

Seznam názvů souborů oddělených dvojtečkami, které chcete zkontrolovat pro poštu. Zpráva, která má být vytištěna při příchodu pošty do určitého souboru, může být zadána oddělením názvu souboru ze zprávy pomocí "?". Pokud je použit v textu zprávy, $ _ se rozbalí na název aktuálního mailového souboru. Příklad:

MAILPATH = '/ var / mail / bfox?' Máte poštu ': ~ / shell-mail?' $ _ Má poštu!

Bash dodává pro tuto proměnnou výchozí hodnotu, ale umístění uživatelských poštovních souborů, které používá, závisí na systému (např. / Var / mail / $ USER ).

OPTERR

Pokud je nastavena hodnota 1, bash zobrazí chybové zprávy vygenerované příkazem getopts vestavěné (viz SHELL BUILTIN COMMANDS níže). OPTERR je inicializován na 1 pokaždé, když je vyvolána shell nebo je spuštěn skript shell.

CESTA

Vyhledávací cesta pro příkazy. Jedná se o seznam adresářů oddělených dvojtečkami, ve kterých shell hledá příkazy (viz PŘÍKAZ VÝKON níže). Výchozí cesta je závislá na systému a je nastavena administrátorem, který nainstaluje bash . Společná hodnota je `` / usr / gnu / bin: / usr / local / bin: / usr / ucb: / bin: / usr / bin :.

POSIXLY_CORRECT

Pokud je tato proměnná v prostředí při spuštění bash , před čtením spouštěcích souborů se shell přepne do režimu posix , jako kdyby byla dodána volba --posix vyvolání. Je-li nastaveno, když je shell spuštěn, bash povolí režim posix , jako kdyby byl nastaven příkaz -o posix .

PROMPT_COMMAND

Pokud je hodnota nastavena, je hodnota provedena jako příkaz před vydáním každého primárního příkazu.

PS1

Hodnota tohoto parametru je rozbalena (viz níže) a použije se jako primární výzva. Výchozí hodnota je `` \ s- \ v \ $ ''.

PS2

Hodnota tohoto parametru je rozšířena jako u PS1 a používá se jako sekundární výzva. Výchozí hodnota je `` > ''.

PS3

Hodnota tohoto parametru se používá jako výzva pro příkaz select (viz SHELL GRAMMAR výše).

PS4

Hodnota tohoto parametru se rozšiřuje stejně jako u PS1 a hodnota se vytiskne před každým příkazem bash během trasování provádění. První znak PS4 se několikrát replikuje, je-li to nutné, pro označení více úrovní adresy. Výchozí hodnota je `` + ''.

ČASOVÝ FORMÁT

Hodnota tohoto parametru se používá jako formátovací řetězec, který specifikuje, jak by měla být zobrazena informace o časování pro potrubí s předponou časově vyhrazené slovo. Znak % představuje sekvenci escape, která je rozbalena na časovou hodnotu nebo jiné informace. Únikové sekvence a jejich významy jsou následující; příložky označují volitelné části.

%%

Doslovný % .

% [ p ] [l] R

Uplynulý čas v sekundách.

% [ p ] [l] U

Počet sekund sekund CPU strávených v uživatelském režimu.

% [ p ] [l] S

Počet sekund CPU strávených v režimu systému.

% P

Procento CPU, vypočteno jako (% U +% S) /% R.

Volitelná p je číslice určující přesnost , počet zlomkových číslic za desetinnou čárkou. Hodnota 0 způsobí, že se neprodukuje žádná desetinná tečka nebo zlomek. Mohou být uvedeny nejvýše tři místa za desetinnou čárkou; hodnoty p větší než 3 jsou změněny na 3. Pokud p není zadáno, použije se hodnota 3.

Volitelný l určuje delší formát, včetně minut, formu MM m SS . FF s. Hodnota p určuje, zda je frakce zahrnutá.

Pokud tato proměnná není nastavena, bash se chová jako by měla hodnotu $ '\ nreal \ t% 3lR \ nuser \ t% 3lU \ nsys% 3lS' . Je-li hodnota null, nebudou zobrazeny žádné informace o časování. Při zobrazení řetězce formátu se přidá nový řádek.

TMOUT

Pokud je hodnota nastavena na hodnotu větší než nula, považuje se TMOUT za výchozí časový limit pro čtení vložené. Příkaz select se ukončí, pokud vstup nepřijde po sekundách TMOUT, když vstup přichází z terminálu. V interaktivním shellu je hodnota interpretována jako počet sekund, které mají počkat na zadání po vydání primární výzvy. Bash končí po uplynutí tohoto počtu vteřin, pokud vstup nedorazí.

auto_resume

Tato proměnná řídí, jak shell spolupracuje s uživatelem a řízením úlohy. Pokud je tato proměnná nastavena, jednoduché příkazy jednoduchého slova bez přesměrování jsou považovány za kandidáty na obnovení stávající zakázané práce. Není přípustná dvojznačnost; pokud je zadáno více úloh, začíná zadaný řetězec, je vybrána poslední přístupná úloha. Název zastavené úlohy v tomto kontextu je příkazový řádek použitý k jeho spuštění. Je-li nastavena hodnota přesně , dodaný řetězec musí přesně odpovídat jménu zakázané zakázky. pokud je nastaven na podřízený řetězec, dodaný řetězec musí odpovídat podřetězec názvu zastaveného úkolu. Hodnota podřetězec poskytuje funkce analogické k %? identifikátor úlohy (viz JOB OVLÁDÁNÍ níže). Je-li nastavena na libovolnou jinou hodnotu, musí být dodaný řetězec předpona názvu zakázané úlohy. to poskytuje funkci analogickou s identifikátorem % úlohy.

histchary

Dvě nebo tři znaky, které řídí rozšíření historie a tokenizace (viz HISTORIE EXPANSION níže). První znak je znak rozšíření historie, znak, který signalizuje zahájení rozšíření historie, obvykle ` ! '. Druhým znakem je znak rychlé substituce , který se používá jako zkratka pro opětovné spuštění předchozí zadaného příkazu a nahrazení jednoho příkazu za jiný v příkazu. Výchozí hodnota je ` ^ '. Nepovinný třetí znak je znak, který označuje, že zbytek řádku je komentář, když je nalezen jako první znak slova, obvykle ` # '. Komentářový znak historie způsobuje, že nahrazení historie bude přeskočeno pro zbývající slova na řádku. Nevytváří nutně analyzátor slastů, aby zacházel se zbytkem řádku jako komentář.

Pole

Bash poskytuje jednorozměrné proměnné pole. Jakákoli proměnná může být použita jako pole; deklarace vestavěné explicitně deklaruje pole. Neexistuje žádný maximální limit velikosti pole, ani požadavek, aby členové byli indexováni nebo přiřazeni souvisle. Políčka jsou indexována pomocí celých čísel a jsou založeny na nulu.

Pokud je proměnná přiřazena k názvu syntaxe [ index ] = hodnota, vytvoří se pole automaticky. Dolní index je považován za aritmetický výraz, který musí být vyhodnocen na číslo větší nebo rovno nule. Chcete-li explicitně deklarovat pole, deklarujte -a jméno (viz SHELL BUILTIN COMMANDS níže). deklarovat - jméno [ dolní index ] je také přijato; dolní index je ignorován. Atributy mohou být určeny pro proměnnou pole pomocí deklarovaných a readonly builtins. Každý atribut platí pro všechny členy pole.

Položky jsou přiřazeny k použití složených přiřazení formuláře name = ( hodnota 1 ... hodnota n ) , kde každá hodnota je z formuláře [ index ] = řetězec . Je vyžadován pouze řetězec . Pokud jsou dodány doplňkové konzoly a dolní index, je tento index přiřazen; jinak index přiděleného prvku je posledním indexem přiřazeným výkazem plus jeden. Indexování začíná nula. Tuto syntaxi také přijímá deklarace vestavěné. Jednotlivé elementy pole mohou být přiřazeny k použití výše uvedené hodnoty [ subscript ] = value syntaxe.

Nevyřízená vestavba se používá k zničení polí. unset jméno [ dolní index ] ničí prvek pole na indexy indexu . zrušit název , kde je název pole nebo unset name [ index ], kde je dolní index * nebo @ , odstraní celé pole.

Deklarované , lokální a readonly builtins přijmou každý -a možnost zadat pole. Integrovaný soubor read- in přijímá možnost -a přiřadit seznam slov přečtených ze standardního vstupu do pole. Nastaví a deklaruje vestavěné hodnoty pole zobrazení způsobem, který umožňuje jejich opětovné použití jako přiřazení.

EXPANZE

Rozšíření se provádí na příkazovém řádku po rozdělení na slova. Existuje sedm druhů rozšíření: rozšiřování vztlaku, rozšíření tilde , parametr a variabilní rozšíření , nahrazení příkazu , aritmetická expanze , rozdělení slov a rozšíření cesty .

Pořadí rozšíření je: rozšiřování ozdob, rozšíření tilde, parametr, proměnná a aritmetická expanze a nahrazení příkazu (děláno zleva doprava), rozdělení slov a rozšíření cesty.

Na systémech, které ji mohou podporovat, je k dispozici další rozšíření: náhrada procesu .

Brace rozšíření

Rozšiřující závorka je mechanismus, pomocí kterého lze vytvářet libovolné řetězce. Tento mechanismus je podobný rozšíření názvů cest , ale generované názvy souborů nemusí existovat. Vzory, které mají být roztaženy, mají formu volitelného preambule , po němž následuje řada řetězců oddělených čárkami mezi pármi podpěr a následným volitelným příspěvkem . Preambule je předznačena každému řetězci obsaženému v závorce a následný zápis je připojen ke každému výslednému řetězci a rozšiřuje se zleva doprava.

Rozšíření posunů může být vnořeno. Výsledky jednotlivých rozvinutých řetězců nejsou seřazeny; zleva doprava. Například { d, c, b } se rozšiřuje na `ade es abe '.

Rozpětí brace se provádí před jakýmikoli dalšími rozšířeními a ve výsledku jsou zachovány všechny znaky, které jsou specifické pro jiné expanze. Je to striktně textové. Bash neuplatňuje žádnou syntaktickou interpretaci kontextu rozšíření nebo textu mezi třmeny.

Tento konstrukt je typicky používán jako zkratka, když společná předpona řetězců, které mají být generovány, je delší než ve výše uvedeném příkladu:

mkdir / usr / local / src / bash / {starý, nový, dist, chyby}

nebo

chow root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

Brace expanze přináší mírnou neslučitelnost s historickými verzemi š . sh nezpracovává otvírání nebo zavírání speciálně, když se objeví jako součást slova, a zachovává je na výstupu. Bash odstraňuje závorky ze slov jako důsledek rozšíření ozdob. Například slovo zadané do souboru sh {1,2} se na výstupu zobrazuje shodně. Stejné slovo je výstupní jako file1 file2 po rozšíření pomocí bash . Je-li požadována přísná kompatibilita se sh , spusťte bash pomocí volby + B nebo deaktivujte rozšíření opevnění pomocí volby + B na příkaz set (viz SHELL BUILTIN COMMANDS níže).

Rozšíření Tilde

Pokud slovo začíná nekótovaným znakem tilde (` ~ '), všechny znaky předcházející první nekótované lomítko (nebo všechny znaky, pokud neexistuje žádná nekótovaná lomítka) se považují za prefix tilde . Není-li uvedena žádná z znaků v prefixu tilde, považují se znaky v prefixu tilde za tilde za možné přihlašovací jméno . Pokud je toto přihlašovací jméno nulovým řetězcem, nahrazuje se tilde hodnotou parametru shell HOME . Pokud je položka HOME zrušena, nahrazuje místo toho domovský adresář uživatele, který provádí shell. V opačném případě je předpona tilde nahrazena domovským adresářem přiřazeným zadanému přihlašovacímu jménu.

Pokud předpona tilde je `~ + ', hodnota proměnné PWD proměnné nahrazuje prefix tilde. Pokud předpona tilde je `~ - ', nahrazuje se hodnota proměnné shell OLDPWD , pokud je nastavena. Pokud znaky, které následují tilde v prefixu tilde, sestávají z čísla N , volitelně předpony "+" nebo "-", předpona tilde je nahrazena odpovídajícím prvkem ze zásobníku adresářů, jak by se zobrazil pomocí dir vestavěného s argumentem tilde-prefix. Pokud se znaky, které následují tilde v prefixu tilde, skládají z čísla bez předcházejícího "+" nebo "-", předpokládá se "+".

Pokud je přihlašovací jméno neplatné nebo pokud se rozšíření tilde nezdaří, slovo se nezmění.

Každé přiřazení proměnné je zkontrolováno pro bezkótované prefixy tilde bezprostředně za : nebo = . V těchto případech se také provádí rozšíření tilde. V důsledku toho lze v přiřazeních k PATH , MAILPATH a CDPATH použít názvy souborů s tildy a shell přiřazuje rozšířenou hodnotu.

Rozšíření parametru

Znak ` $ 'představuje rozšíření parametrů, náhradu příkazu nebo aritmetickou expanzi. Název parametru nebo symbol, který má být rozbalen, může být přiložen do závor, které jsou volitelné, ale slouží k ochraně proměnné, která má být rozšiřována, od znaků, které jsou bezprostředně následující, které lze interpretovat jako součást jména.

Pokud se používají rovnátka, odpovídající koncová vzpěra je první ` } ', která neprochází zpětným lomítkem nebo uvnitř citovaného řetězce, a nikoliv v rámci vložené aritmetické expanze, nahrazení příkazu nebo rozšíření paramteru.

Hodnota parametru je nahrazena. Pokud je parametr poziční parametr s více než jednou číslicí, nebo pokud je parametr následován znakem, který se nemá interpretovat jako součást jeho jména, jsou požadovány vzory.

V každém z níže uvedených případů je slovo předmětem rozšíření tilde, rozšíření parametrů, nahrazení příkazu a aritmetické expanze. Pokud nevykonáváte rozšíření podřetězce, testy bash pro parametr nenastavený nebo nulový; vynechání dvojtečky vede k testu pouze pro parametr, který je nenastavený.

Použijte výchozí hodnoty . Pokud je parametr nenastavený nebo nulový, nahrazuje se rozšířením slova . V opačném případě je hodnota parametru nahrazena.

Přiřadit výchozí hodnoty . Pokud je parametr nenastaven nebo null, rozšíření slova je přiřazeno parametru . Hodnota parametru je pak nahrazena. Tímto způsobem nelze přiřadit polohové parametry a speciální parametry.

Chyba zobrazení, pokud je null nebo Unset . Je-li parametr null nebo unset, je do standardní chyby zapsána rozšíření slova (nebo zpráva, která se vyskytuje v tomto případě, pokud není slovo přítomna) a shell, pokud není interaktivní, ukončí. V opačném případě je hodnota parametru nahrazena.

Použijte alternativní hodnotu . Pokud je parametr nulový nebo nenastavený, nic není nahrazeno, jinak je nahrazeno rozšířením slova .

Rozšiřuje se na jména proměnných, jejichž názvy začínají předponou , odděleny prvním znakem speciální proměnné IFS .

Délka znaků v hodnotě parametru je nahrazena. Je-li parametr * nebo @ , substituovaná hodnota je počet polohových parametrů. Je-li parametrem název pole předplacené * nebo @ , nahrazená hodnota je počet prvků v poli.

Slovo je rozbaleno tak, aby vytvářelo vzor stejně jako v rozšíření cesty. Pokud vzorec odpovídá počátku hodnoty parametru , výsledkem rozšíření je rozšířená hodnota parametru s nejkratším vzorem shody (případ " # ") nebo nejdelší vzorek (`` ## ' případ "). Pokud je parametr @ nebo * , operace odebrání vzoru se postupně aplikuje na každý poziční parametr a rozšíření je výsledným seznamem. Pokud je parametrem proměnná pole přihlášená pomocí @ nebo * , operace odebrání vzoru se postupně použije pro každý člen pole a rozšíření je výsledným seznamem.

Slovo je rozbaleno tak, aby vytvářelo vzor stejně jako v rozšíření cesty. Pokud se vzorec shoduje s koncovou částí rozšířené hodnoty parametru , pak výsledkem rozšíření je rozšířená hodnota parametru s nejkratším vzorem shody (případ " % ") nebo nejdelší vzorek shody (" % " % ''). Pokud je parametr @ nebo * , operace odebrání vzoru se postupně aplikuje na každý poziční parametr a rozšíření je výsledným seznamem. Pokud je parametrem proměnná pole přihlášená pomocí @ nebo * , operace odebrání vzoru se postupně použije pro každý člen pole a rozšíření je výsledným seznamem.

Vzor je rozbalen tak, aby vytvořil vzorec stejně jako v rozšíření cesty. Parametr je rozbalen a nejdelší shoda vzoru s jeho hodnotou je nahrazena řetězcem . V první podobě je nahrazen pouze první zápas. Druhý formulář způsobí nahrazení všech shody vzoru řetězcem . Pokud vzor začíná znakem # , musí se shodovat na začátku rozšířené hodnoty parametru . Pokud vzorec začíná hodnotou % , musí se shodovat na konci rozšířené hodnoty parametru . Pokud je řetězec nulový, jsou smazány vzorky a vzor / následující vzor může být vynechán. Je-li parametr @ nebo * , substituční operace se použije na každý pozicový parametr naopak a rozšíření je výsledným seznamem. Pokud je parametrem proměnná pole přihlášená s @ nebo * , substituční operace se použije na každý člen pole a jeho rozšíření je výsledným seznamem.

Command Substitution

Nahrazení příkazu umožňuje výstup příkazu nahradit název příkazu. Existují dvě formy:

$ ( příkaz )

nebo

` příkaz '

Bash provádí rozšíření spuštěním příkazu a nahrazením nahrazení příkazu standardním výstupem příkazu s odstraněním všech koncových nových řádků. Vložené nové řádky se nevymažou, ale mohou být odstraněny během rozdělení slov. Náhradní příkaz $ ( soubor mačky ) lze nahradit ekvivalentním, ale rychlejším $ (< soubor ).

Když je použita náhrada ve starém stylu, zpáteční lomítko si zachovává svůj doslovný význam s výjimkou případů, kdy následuje $ , ` , nebo \ . První zpětná vazba, která předchází zpětné lomítko, ukončí nahrazení příkazu. Při použití příkazu $ ( příkaz ) tvoří všechny znaky mezi závorky příkaz; žádné nejsou ošetřeny speciálně.

Substituce příkazů mohou být vnořené. Chcete-li hnít při použití zpětného formuláře, unikněte vnitřní zpětné křivky pomocí zpětných lomů.

Pokud se substituce objeví uvnitř dvojitých uvozovek, rozdělení slov a rozšíření názvů cest se na výsledcích nezobrazí.

Aritmetické rozšíření

Aritmetická expanze umožňuje vyhodnocení aritmetického výrazu a nahrazení výsledku. Formát pro aritmetickou expanzi je:

$ (( výraz ))

Výraz se zachází jako s dvojitými uvozovkami, ale dvojitá citace uvnitř závorek se neupravuje speciálně. Všechny znaky výrazu procházejí rozšířením parametrů, rozšířením řetězců, nahrazením příkazu a odebráním citátu. Aritmetické substituce mohou být vnořené.

Hodnocení se provádí podle níže uvedených pravidel pod ARITMETICKÝM HODNOCENÍM . Je-li výraz neplatný, bash vytiskne zprávu indikující selhání a nenastane žádná náhrada.

Nahrazení procesu

Nahrazování procesů je podporováno na systémech podporujících pojmenované kanály ( FIFOs ) nebo metodu / dev / fd pro pojmenování otevřených souborů. Má formu <( seznamu ) nebo > ( seznamu ) . Seznam procesů je spuštěn s jeho vstupem nebo výstupem připojeným k FIFO nebo nějakému souboru v / dev / fd . Název tohoto souboru je předán jako argument pro aktuální příkaz jako výsledek rozšíření. Pokud se použije formulář > ( seznam ) , zapsání do souboru poskytne vstup pro seznam . Pokud je použit formulář <( seznam ) , měl by být přečten soubor předaný jako argument, aby se získal výstup ze seznamu .

Pokud je k dispozici, nahrazení procesu se provádí současně s parametry a proměnnou expanzí, nahrazením příkazu a aritmetickou expanzí.

Rozdělení slov

Shell skenuje výsledky rozšíření parametrů, nahrazení příkazu a aritmetické rozšíření, které se neobjevily v rámci dvojitých uvozovek pro rozdělení slov .

Skořepina zachází s každým znakem IFS jako oddělovačem a rozděluje výsledky ostatních expanzí do slov na těchto charakterech. Je-li IFS deaktivován nebo je jeho hodnota přesně , výchozí hodnota, pak libovolná posloupnost znaků IFS slouží k vymezení slov. Pokud IFS má jinou hodnotu než výchozí, pak se na počátku a na konci slova ignorují posloupnosti mezery a mezery znaků mezery , pokud je znak mezery v hodnotě IFS (znak mezery IFS ). Jakýkoli znak v IFS, který není prázdným znakem IFS , spolu s libovolnými přilehlými znaky znaku mezery IFS vymezuje pole. Sekvence znaků mezery IFS je také považována za oddělovač. Je-li hodnota IFS nulová, nedochází k rozdělení slov.

Explicitní argumenty null ( "" nebo "" ) jsou zachovány. Nekotované implicitní nulové argumenty vyplývající z rozšíření parametrů, které nemají žádné hodnoty, jsou odebrány. Pokud není parametr bez hodnoty rozbalen v rámci dvojitých uvozovek, vygeneruje se nulový argument a zůstane zachován.

Všimněte si, že pokud nedojde k rozšíření, není provedeno žádné rozdělení.

Rozšíření názvu cesty

Po rozdělení slov, pokud nebyla nastavena volba -f , bash skenuje každé slovo pro znaky * ,? , a [ . Pokud se objeví jeden z těchto znaků, slovo se považuje za vzorek a nahrazeno abecedním seznamem názvů souborů odpovídajících vzoru. Pokud nejsou nalezeny žádné odpovídající názvy souborů a možnost nullglob je zakázána, slovo zůstane nezměněno. Pokud je nastavena volba nullglob a nejsou nalezena žádná shoda, slovo bude odstraněno. Je-li povolena možnost shell nocaseglob , provede se shoda bez ohledu na případ abecedních znaků. Při použití vzoru pro rozšíření názvu cesty musí být znak "`. '' Na začátku jména nebo bezprostředně za lomítkem výslovně splněn, pokud není nastavena volba shell dotglob . Při přiřazování názvu cesty musí být znak lomítka vždy explicitně spojen. V jiných případech není znak ``. '' Zpracován speciálně. Viz popis shopt níže pod příkazem SHELL BUILTIN COMMANDS pro popis možností nocaseglob , nullglob a dotglob shellu.

Hromadnou proměnnou GLOBIGNORE lze použít k omezení sady názvů souborů odpovídajících vzoru . Je-li nastavena funkce GLOBIGNORE , každý odpovídající název souboru, který se shoduje s některým ze vzorků v aplikaci GLOBIGNORE, je odebrán ze seznamu shody. Názvy souborů ``. '' A `` .. '' jsou vždy ignorovány, i když je nastavena GLOBIGNORE . Nastavení GLOBIGNORE však má za následek povolení doplňku shell dotglob , takže se budou shodovat všechny ostatní názvy souborů začínající s ``. '' . Chcete-li staré chování ignorovat názvy souborů začínající ``. '' , Vytvořte ``. * '' Jeden ze vzorů v GLOBIGNORE . Možnost dotglob je vypnutá, když je GLOBIGNORE nenastaveno.

Odpovídání vzorů

Jakýkoli znak, který se objevuje ve vzoru, jiný než znaky zvláštního vzoru popsaný níže, se shoduje. NUL znak nemusí nastat ve vzoru. Zvláštní znakové znaky musí být citovány, pokud mají být dosazeny doslovně.

Speciální znakové znaky mají následující významy:

* * *

Odpovídá libovolnému řetězci, včetně nulového řetězce.

?

Shoduje se s jakýmkoli jednotlivým znakem.

[...]

Odpovídá některému z přiložených znaků. Pár znaků oddělených pomlčkou označuje rozsahový výraz ; jakýkoli znak, který seřídí mezi těmito dvěma znaky, včetně souběžného řazení a sady znaků aktuálního národního prostředí, je shodný. Pokud první znak po [ je ! nebo a ^ pak je uzavřena libovolná písmena, která není uzavřena. Pořadí řazení znaků v rozsahu výrazů je určeno aktuálním jazykem a hodnotou proměnné prostředí LC_COLLATE , pokud je nastavena. A - může být shodné tím, že se jako první nebo poslední znak v sadě nachází. A ] může odpovídat zařazením prvního znaku do sady.

V rámci třídy [ a ] lze zadat třídy znaků pomocí syntaxe [: class :] , kde třída je jednou z následujících tříd definovaných v standardu POSIX.2:

alnum alpha ascii prázdný cntrl číslice graf dolní tisk bod místo horní slovo xdigit
Třída znaků odpovídá libovolné osobě patřící do této třídy. Slovo třída znaků odpovídá písmenům, číslicím a znaku _.

V rámci [ a ] lze třídu ekvivalence zadat pomocí syntaxe [= c =] , která se shoduje se všemi znaky se stejnou váhovou hodnotou řazení (podle definice aktuální lokality) jako znak c .

V [ a ] je syntaxe [. symbolem ] odpovídá symbolu porovnávacího symbolu .

Je-li povolena volba extglob shellu pomocí vestavěné šifry , rozpozná se několik rozšířených operátorů pro přizpůsobení vzorků. V následujícím popisu je seznam vzorů seznam jednoho nebo více vzorků oddělených znakem | . Kompozitní vzory mohou být vytvořeny s použitím jednoho nebo více z následujících vzorců:

? ( seznam vzorů )

Shoduje se nulovým nebo jedním výskytem daných vzorků

* ( seznam vzorů )

Shoduje se s nulovými nebo více výskyty daných vzorků

+ ( vzorový seznam )

Shoduje se s jedním nebo více výskyty daných vzorků

@ ( vzorový seznam )

Odpovídá přesně jednomu z daných vzorků

! ( seznam vzorů )

Shoduje se s něčím kromě jednoho z daných vzorků

Odstranění citace

Po předchozích rozšířeních jsou odstraněny všechny nekótované výskyty znaků \ , " a ", které nebyly výsledkem některého z výše uvedených rozšíření.

REDIRECTION

Před provedením příkazu může být její vstup a výstup přesměrovány pomocí speciální notace interpretované pláštěm. Přesměrování lze také použít k otevírání a zavírání souborů pro aktuální prostředí pro vytváření prostředí. Následující operátoři přesměrování mohou předcházet nebo se objevovat kdekoli v jednoduchém příkazu nebo mohou následovat příkaz . Přesměrování jsou zpracovávány v pořadí, v jakém se zobrazují, zleva doprava.

V následujících popisech, pokud je číslo deskriptoru souboru vynecháno a první znak operátoru přesměrování je < , přesměrování odkazuje na standardní vstup (deskriptor souboru 0). Pokud je první znak operátoru přesměrování > , přesměrování odkazuje na standardní výstup (deskriptor souboru 1).

Slovo, které následuje po operátoru přesměrování v následujících popisy, není-li uvedeno jinak, je vystaveno rozšíření náklonu, rozšíření tilde, rozšíření parametrů, nahrazení příkazu, aritmetická expanze, odstranění citátu, rozšíření názvu cesty a rozdělení slov. Pokud se rozbalí na více než jedno slovo, bash hlásí chybu.

Všimněte si, že pořadí přesměrování je významné. Například příkaz

ls > adresář 2 > & 1

směruje standardní výstup i standardní chybu do dirlistu souboru, zatímco příkaz

ls 2 > & 1 > dirlist

směruje pouze standardní výstup do souboru dirlist , protože standardní chyba byla duplikována jako standardní výstup předtím, než byl standardní výstup přesměrován na seznam dirlistů .

Bash zpracovává několik názvů souborů zvlášť, když se používají při přesměrování, jak je popsáno v následující tabulce:

/ dev / fd / fd

Pokud fd je platné celé číslo, popisovač souborů fd je duplikován.

/ dev / stdin

Popisovač souborů 0 je duplikován.

/ dev / stdout

Popisovač souborů 1 je duplikován.

/ dev / stderr

Popisovač souborů 2 je duplikován.

/ dev / tcp / host / port

Pokud je hostitel platný název hostitele nebo internetová adresa a port je celé číslo portu nebo název služby, bash pokusí otevřít připojení TCP do příslušné zásuvky.

/ dev / udp / hostitel / port

Pokud je hostitel platný název hostitele nebo internetová adresa a port je celé číslo portu nebo název služby, bash pokusí otevřít připojení UDP k odpovídající zásuvce.

Selhání otevření nebo vytvoření souboru způsobí selhání přesměrování.

Přesměrování vstupu

Přesměrování vstupu způsobí, že soubor, jehož jméno vyplývá z rozšíření slova , se otevře pro čtení v deskriptoru souborů n , nebo standardní vstup (deskriptor souboru 0), pokud n není zadán.

Obecný formát pro přesměrování vstupu je:

[ n ] < slovo

Přesměrování výstupu

Přesměrování výstupu způsobí, že soubor, jehož jméno je výsledkem rozšíření slova, který má být otevřen pro zápis na deskriptoru souborů n , nebo standardní výstup (deskriptor souboru 1), pokud n není zadán. Pokud soubor neexistuje, je vytvořen; pokud existuje, je zkrácena na nulovou velikost.

Obecný formát pro přesměrování výstupu je:

[ n ] > slovo

Je-li operátor přesměrování > a volba noclobber na vestavěnou sadu byla povolena, přesměrování se nezdaří, pokud existuje soubor, jehož jméno je výsledkem rozšíření slov a je běžným souborem. Je-li operátor přesměrování > | , nebo je operátor přesměrování > a volba noclobber k zadanému vestavěnému příkazu není povolena, přesměrování se pokouší, i když existuje soubor s názvem slovem .

Přidání přesměrovaného výstupu

Přesměrování výstupu tímto způsobem způsobí, že soubor, jehož jméno je výsledkem rozšíření slova, který má být otevřen pro připojení k deskriptoru souborů n , nebo standardní výstup (deskriptor souboru 1), pokud n není zadán. Pokud soubor neexistuje, je vytvořen.

Obecný formát pro připojení výstupu je:

[ n ] >> slovo

Přesměrování standardního výstupu a standardní chyby

Bash umožňuje přesměrování jak standardního výstupu (deskriptoru souborů 1), tak standardního výstupu chyby (deskriptoru souborů 2) do souboru, jehož jméno je rozšířením slova s tímto konstruktem.

Existují dva formáty pro přesměrování standardního výstupu a standardní chyby:

&> slovo

a

> & slovo

Z těchto dvou forem je první výhoda. To je sémanticky ekvivalentní

> slovo 2 > & 1

Zde dokumenty

Tento typ přesměrování instruuje shell, aby četl vstup z aktuálního zdroje, dokud není vidět řádek obsahující pouze slovo (bez koncových polotovarů). Všechny řádky přečtené do tohoto bodu se pak použijí jako standardní vstup pro příkaz.

Formát zde-dokumentů je:

<< [ - ] slovo here-document delimiter

Žádné rozšíření parametrů, nahrazení příkazu, rozšíření aritmetiky nebo rozšíření cesty se neprovádí na slovo . Jsou-li citovány libovolné znaky ve slově , oddělovač je výsledek odebrání citace na slovo a řádky v tomto dokumentu nejsou rozbaleny. Pokud je slovo nekotazováno, všechny řádky tohoto dokumentu jsou podrobeny rozšiřování parametrů, nahrazení příkazu a aritmetické expanzi. V druhém případě se znaková řada \ ignoruje a \ musí být použito pro citování znaků \ , $ a ` .

Je-li operátor přesměrování << - , pak jsou všechny přední znaky tabulátoru odstraněny z vstupních řádků a řádek obsahující oddělovač . To dovoluje, aby zde dokumenty v shellových skriptech byly odsazeny přirozeným způsobem.

Zde jsou řetězce

Varianta zde dokumentuje formát:

<<< slovo

Slovo je rozšířeno a dodává se na příkaz na jeho standardním vstupu.

Duplicitní deskriptory souborů

Operátor přesměrování

[ n ] <& slovo

se používá k duplikování deskriptorů vstupních souborů. Pokud se slovo rozšiřuje na jeden nebo více číslic, deskriptor souboru označený jako n je vytvořen jako kopie tohoto popisovače souborů. Pokud číslice ve slově neurčují deskriptor souboru otevřený pro vstup, dojde k chybě přesměrování. Pokud je slovo vyhodnoceno - , je deskriptor souboru n uzavřen. Pokud není zadáno n , použije se standardní vstup (deskriptor souboru 0).

Operátor

[ n ] > & slovo

se používá podobně jako duplikáty deskriptorů výstupních souborů. Pokud není zadáno n , použije se standardní výstup (deskriptor souboru 1). Pokud číslice ve slově neurčují deskriptor souboru otevřený pro výstup, dojde k chybě přesměrování. Jako zvláštní případ, pokud je n vynecháno a slovo nerozšíří na jednu nebo více číslic, jsou standardní výstupní a standardní chyba přesměrovány tak, jak bylo popsáno výše.

Přesouvání deskriptorů souborů

Operátor přesměrování

[ n ] <& digit -

přesune číselník deskriptoru souboru na deskriptor souboru n nebo standardní vstup (deskriptor souboru 0), pokud n není zadán. číslice je uzavřena poté, co byla duplikována na n .

Stejně tak operátor přesměrování

[ n ] > & číslice -

přesune číselník deskriptoru souboru na deskriptor souboru n nebo standardní výstup (deskriptor souboru 1), pokud n není zadán.

Otevření deskriptorů souborů pro čtení a psaní

Operátor přesměrování

[ n ] <> slovo

způsobí, že soubor, jehož jméno je rozšíření slova , bude otevřeno pro čtení i zápis na deskriptoru souborů n , nebo pro deskriptor souboru 0, pokud n není zadán. Pokud soubor neexistuje, je vytvořen.

ALIASES

Aliasy povolují, aby řetězec byl nahrazen slovem, když je používán jako první slovo jednoduchého příkazu. Shell udržuje seznam aliasů, které mohou být nastaveny a deaktivovány aliasem a unalias vestavěnými příkazy (viz SHELL BUILTIN COMMANDS níže). První slovo každého příkazu, pokud je nekotované, je zkontrolováno, zda má alias. Pokud ano, je toto slovo nahrazeno textem aliasu. Název aliasu a náhradní text mohou obsahovat jakýkoli platný vstupní skořepiny, včetně výše uvedených metaharakterů , s výjimkou, že název aliasu nemusí obsahovat = . První slovo nahrazujícího textu je testováno na aliasy, ale slovo, které je totožné s rozbaleným aliasem, není podruhé rozbaleno. To znamená, že se může například alias ls ls -F a bash nesnaží rekurzivně rozšiřovat nahrazující text. Pokud je poslední znak aliasu prázdný , pak je pro další rozšíření aliasu také zkontrolováno další příkazové slovo po aliasu.

Aliasy jsou vytvořeny a uvedeny pod příkazem alias a odstraněny příkazem unalias .

V náhradním textu neexistuje žádný mechanismus pro použití argumentů. Pokud jsou potřebné argumenty, měla by být použita funkce shellu (viz FUNKCE níže).

Aliasy nejsou rozšířeny, pokud shell není interaktivní, pokud není nastavena volba shellu_exportu shell (viz popis shopt pod SHELL BUILTIN COMMANDS níže).

Pravidla týkající se definování a používání aliasů jsou poněkud matoucí. Bash vždy čte nejméně jeden úplný řádek vstupu před provedením jakéhokoli příkazu na tomto řádku. Aliasy jsou rozšířeny při čtení příkazu, nikoli při jeho spuštění. Proto definice aliasu, která se objevuje na stejném řádku jako jiný příkaz, se projeví až po načtení dalšího řádku vstupu. Příkazy následující po definici aliasu na tomto řádku nejsou novým aliasem ovlivněny. Toto chování je také problém při spuštění funkcí. Aliasy se rozšiřují při čtení definice funkce, nikoli při spuštění funkce, protože definice funkce je sama složeným příkazem. V důsledku toho nejsou aliasy definované ve funkci k dispozici, dokud nebude tato funkce provedena. Chcete-li být v bezpečí, vždy dejte definice aliasu na samostatný řádek a nepoužívejte alias v složených příkazech.

Pro téměř každý účel jsou aliasy nahrazeny funkcemi skořepin.

FUNKCE

Funkce shellu definovaná výše uvedeným příkazem SHELL GRAMMAR ukládá řadu příkazů pro pozdější provedení. Když je název funkce shell použit jako jednoduché jméno příkazu, provede se seznam příkazů přidružených k tomuto názvu funkce. Funkce jsou prováděny v kontextu současného shellu; není vytvořen žádný nový proces, který by je interpretoval (na rozdíl od provedení skriptu prostředí). Když je funkce spuštěna, parametry pro funkci se během jejího provádění stanou pozičními parametry. Zvláštní parametr # je aktualizován tak, aby odrážel změnu. Polohový parametr 0 zůstává nezměněn. Proměnná FUNCNAME je při spuštění funkce nastavena na název funkce. Všechny ostatní aspekty prostředí prostředí shell jsou totožné s funkcí a volajícím s tím rozdílem, že odkrytá DEBUG (viz popis vestavěného souboru pod SHELL BUILTIN COMMANDS níže) není zděděna, pokud funkce nebyla zadána atribut trasování ( viz popis deklarace vložené níže).

Proměnné místní funkce lze deklarovat pomocí místního vestavěného příkazu. Obvykle jsou proměnné a jejich hodnoty sdíleny mezi funkcí a jejich volajícím.

Pokud je příkaz vrací vestavěný příkaz ve funkci, funkce se dokončí a spuštění se pokračuje dalším příkazem po volání funkce. Po dokončení funkce se hodnoty polohových parametrů a speciálního parametru # obnoví na hodnoty, které měly před spuštěním funkce.

Názvy funkcí a definice mohou být uvedeny s volbou -f pro deklarování nebo zadání vestavěných příkazů. Možnost -F pro deklaraci nebo typování obsahuje pouze názvy funkcí. Funkce mohou být exportovány tak, aby se subshelly automaticky definovaly pomocí volby -f k exportu .

Funkce mohou být rekurzivní. Na rekurzivní hovory není stanovena žádná omezení.

ARITMETICKÉ HODNOCENÍ

Shell umožňuje vyhodnotit aritmetické výrazy za určitých okolností (viz příkaz vestavěný příkaz a Aritmetické rozšíření ). Vyhodnocení se provádí v celých číslech s pevnou šířkou, bez kontroly přetečení, ačkoli dělení 0 je zachyceno a označeno jako chyba. Operátoři a jejich přednost a asociativita jsou stejní jako v jazyce C. Následující seznam operátorů je seskupen do úrovní operátorů s rovnocenností. Úrovně jsou uvedeny v pořadí podle klesající priority.

id ++ id -

variabilní post-inkrementální a post-dekrementace

++ id - id

variabilní předběžná inkrementace a předběžné snížení

- +

unární mínus a plus

! ~

logické a bitové negace

**

exponentiace

* /%

násobení, rozdělení, zbytek

+ -

doplněk, odčítání

<< >>

levý a pravý bitový posun

<=> = <>

srovnání

==! =

rovnosti a nerovnosti

A &

bitové AND

^

bitově exkluzivní OR

|

bitová OR

&&

logické AND

||

logická OR

expr ? expr : expr

podmíněné hodnocení

= * = / =% = + = - = << = >> = & = ^ = | =

úkol

expr1 , expr2

čárka

Shellové proměnné jsou povoleny jako operandy; Rozšíření parametru se provádí před vyhodnocením výrazu. V rámci výrazu mohou být proměnné prostředí odkazovány také názvem bez použití syntaxe rozšíření parametrů. Hodnota proměnné je vyhodnocena jako aritmetický výraz, když je odkazován. Převaděčová proměnná nemusí mít zapsaný atribut integer, který se má použít v výrazu.

Konstanty s vedoucím 0 jsou interpretovány jako osmičková čísla. Vedoucí 0x nebo 0X označuje hexadecimální hodnotu. V opačném případě čísla mají formu [ base # ] n, kde base je desetinné číslo mezi 2 a 64 reprezentující aritmetický základ a n je číslo v této základně. Pokud je báze # vynechána, použije se základna 10. Číslice větší než 9 představují malé písmena, velká písmena, @ a _ v tomto pořadí. Pokud je základna menší nebo rovna 36, ​​malá a velká písmena mohou být vzájemně zaměnitelná, aby představovala čísla mezi 10 a 35.

Operátoři jsou hodnoceni podle pořadí. Subexprese v závorkách jsou nejprve vyhodnoceny a mohou přepsat výše uvedená pravidla přednosti.

PODMÍNĚNÉ VYJÁDŘENÍ

Podmíněné výrazy jsou používány příkazem [[ compound] a testem a příkazy [ vestavěné příkazy pro testování atributů souborů a provádění řetězcových a aritmetických porovnání. Výrazy jsou tvořeny z následujících unárních nebo binárních primárních prvků. Je-li jakýkoli argument souboru k jednomu z primárních prvků obsažen ve formuláři / dev / fd / n , pak je zaškrtnut deskriptor souboru n . Pokud je parametr souboru na jeden z primárních prvků / dev / stdin , / dev / stdout nebo / dev / stderr , deskriptor souboru 0, 1 nebo 2, je zaškrtnuto.

-soubor

Je pravda, zda existuje soubor .

-b soubor

Je pravda, jestli soubor existuje a je speciální soubor bloku.

-c soubor

Je pravda, zda existuje soubor a je speciální soubor znaků.

-d soubor

Je pravda, zda existuje soubor a je adresář.

-e soubor

Je pravda, zda existuje soubor .

-f soubor

Je pravda, zda existuje soubor a je to běžný soubor.

-g soubor

Je pravda, jestli soubor existuje a je nastaven-group-id.

-h soubor

Je pravda, zda existuje soubor a je symbolickým odkazem.

-k soubor

Je pravda, zda existuje soubor a je nastaven jeho "lepkavý" bit.

-p soubor

Je pravda, jestli soubor existuje a je pojmenované potrubí (FIFO).

-r soubor

Je pravda, zda soubor existuje a je čitelný.

-s souboru

Je pravda, jestli soubor existuje a má velikost větší než nula.

-t fd

Je pravda, je-li souborový deskriptor fd otevřený a odkazuje na terminál.

-u soubor

Je pravda, zda existuje soubor a je nastaven bit jeho set-user id.

-w soubor

Je pravda, zda existuje soubor a je zapisovatelný.

-x soubor

Je pravda, zda soubor existuje a je spustitelný.

-O soubor

Je pravda, jestli soubor existuje a je vlastněn efektivní id uživatele.

-G soubor

Je pravda, zda soubor existuje a je vlastněn identifikátorem efektivní skupiny.

-L soubor

Je pravda, zda existuje soubor a je symbolickým odkazem.

-S soubor

Je pravda, zda existuje soubor a je zásuvka.

-N soubor

Je pravda, zda soubor existuje a byl změněn od jeho posledního přečtení.

file1 - nt file2

Je pravda, jestli je soubor1 novější (podle data úpravy) než soubor2 , nebo pokud existuje soubor1 a soubor2 ne.

soubor1 - soubor2

Je pravda, zda je soubor1 starší než soubor2 nebo zda soubor2 existuje a soubor1 ne.

file1 -ef file2

Je pravda, jestli soubor1 a soubor2 odkazují na stejné číslo zařízení a inode.

-o optname

Je pravda, pokud je povoleno optname volby shell. Viz seznam voleb pod popisem volby -o na vestavěnou sadu níže.

-z řetězec

Je pravda, pokud je délka řetězce nula.

-n řetězec

řetězec

Je pravda, pokud délka řetězce je nenulová.

string1 == string2

Je pravda, pokud jsou řetězce stejné. = může být použito místo == pro přísné dodržování POSIX.

string1 ! = string2

Je pravda, že řetězce nejsou stejné.

string1 < string2

Je pravda, zda řetězec 1 v předcházejícím národním jazyce lexikograficky seřadí před řetězec2 .

string1 > string2

Je pravdivé, pokud řetězec 1 se za aktuální řetězec lišuje lexikograficky za aktuální řetězec .

arg1 OP arg2

OP je jeden z -eq , -ne , -lt , -le , -gt nebo -ge . Tito aritmetické binární operátory vrátí true, jestliže arg1 je roven ne, menší než, nebo menší, nebo větší, nebo větší nebo roven arg2 . Arg1 a arg2 mohou být pozitivní nebo záporná celá čísla.

JEDNODUCHÉ ROZŠÍŘENÍ PŘÍKAZŮ

Když je proveden jednoduchý příkaz, shell provede následující rozšíření, přiřazení a přesměrování zleva doprava.

1. Slova, která analyzátor označil jako přiřazení proměnných (předcházejících jménu příkazu) a přesměrování jsou uložena pro pozdější zpracování.

2. Slova, která nejsou přiřazení proměnných nebo přesměrování, jsou rozšířena. Pokud po expanzi zůstanou nějaká slova, první slovo je považováno za jméno příkazu a zbývající slova jsou argumenty.

3. Přesměrování se provádí způsobem popsaným výše v části REDIRECTION .

4. Text po = v každé přiřazení proměnné předtím, než je přiřazen proměnné, projde rozšířením tilde, rozšířením parametru, nahrazením příkazu, aritmetickou expanzí a odebráním citátu.

Není-li výsledkem žádné jméno příkazu, přiřazení proměnných ovlivní aktuální prostředí shellu. V opačném případě jsou proměnné přidány do prostředí provedeného příkazu a nemají vliv na aktuální prostředí shellu. Pokud se některá z přiřazení pokusí přiřadit hodnotu proměnné readonly, dojde k chybě a příkaz se ukončí s nenulovým stavem.

Pokud se nezobrazí žádný název příkazu, provede se přesměrování, ale neovlivní aktuální prostředí shellu. Chyba přesměrování způsobí ukončení příkazu s nenulovým stavem.

Pokud je po rozbalení ponecháno jméno příkazu, pokračuje v provádění, jak je popsáno níže. V opačném případě příkaz opustí. Pokud některá z rozšíření obsahovala příkazovou náhradu, je stav ukončení příkazu stav ukončení posledního provedeného nahrazení příkazu. Pokud nebyly nahrazeny příkazy, příkaz se ukončí se stavem nula.

PŘÍKAZ VÝKONU

Po rozdělení příkazu na slova, pokud je výsledkem jednoduchý příkaz a volitelný seznam argumentů, jsou provedeny následující akce.

Pokud název příkazu neobsahuje žádné lomítka, shell se pokusí nalézt. Pokud existuje nějaká funkce shell tímto názvem, je funkce vyvolána tak, jak je popsáno výše v FUNKCI . Pokud název neodpovídá funkci, shell ji vyhledá v seznamu integrovaných prostředí. Pokud je nalezena shoda, vyvolá se vestavěný.

Pokud název není funkce shellu ani vestavěný a neobsahuje žádné lomítka, bash prohledá každý prvek PATH pro adresář obsahující spustitelný soubor tímto názvem. Bash používá tabulku hash k zapamatování plných názvů cest spustitelných souborů (viz hash pod SHELL BUILTIN COMMANDS níže). Plné vyhledávání adresářů v PATH se provádí pouze v případě, že příkaz není nalezen v tabulce hash. Pokud hledání není úspěšné, shell vytiskne chybovou zprávu a vrátí stav ukončení 127.

Pokud je hledání úspěšné, nebo jestliže název příkazu obsahuje jednu nebo více lomů, shell spustí uvedený program v samostatném prostředí pro provedení. Argument 0 je nastaven na daný název a zbývající argumenty příkazu jsou nastaveny na dané argumenty, pokud existují.

Pokud se toto spuštění nezdaří, protože soubor není ve spustitelném formátu a soubor není adresář, předpokládá se, že je shell skript , soubor obsahující shell příkazy. Podsvícený je spuštěn, aby ji provedl. Tento subshell se znovu inicializuje, takže efekt je takový, jako by byl vyvolán nový shell pro zpracování skriptu, s výjimkou toho, že umístění příkazů, které si rodič vzpomíná (viz hash níže pod příkazem SHELL BUILTIN COMMANDS ), udržuje dítě.

Je-li program souborem začínajícím #! , zbytek prvního řádku určuje interpretace programu. Shell spustí zadaný interpret v operačních systémech, které sami nemají tento spustitelný formát. Argumenty pro tlumočníka se skládají z jediného volitelného argumentu, který následuje po názvu tlumočníka na prvním řádku programu, za nímž následuje název programu a následují argumenty příkazu, pokud existují.

PROVOZNÍ PROSTŘEDÍ

Shell má prostředí pro zpracování , které se skládá z následujících položek:

* otevřené soubory zděděné shellem při vyvolání, modifikované přesměrováním dodávaným do implementovaného souboru

* aktuální pracovní adresář nastavený pomocí cd , pushd nebo popd , nebo zděděný shell při vyvolání

* masku režimu vytváření souborů nastavenou podle umasku nebo zděděného z rodičovského shellu

* současné pasti nastavené pasti

* parametry shellu, které jsou nastaveny pomocí přiřazení proměnných nebo sady nebo zděděné z nadřazeného prostředí prostředí v prostředí shellu

* shellové funkce definované během spouštění nebo zděděné z nadřazeného shellu v prostředí

* volby povolené při vyvolání (standardně nebo pomocí argumentů příkazového řádku) nebo nastavením

* Možnosti povolené uživatelem

* shellové aliasy definované aliasem

* různé ID procesů, včetně těch, které se týkají pozadí, hodnoty $$ a hodnoty $ PPID

Pokud má být proveden jednoduchý příkaz jiný než vestavěná nebo shellová funkce, vyvolá se v samostatném prostředí pro zpracování, které se skládá z následujícího. Pokud není uvedeno jinak, hodnoty se dělí z shellu.

* otevřené soubory shellu a všechny změny a dodatky specifikované přesměrováním příkazu

* aktuální pracovní adresář

* masku režimu vytváření souborů

* proměnné shell označené pro export spolu s proměnnými exportovanými pro příkaz, předané v prostředí

* pasce chycené shellu jsou resetovány na hodnoty zděděné z rodičovského shellu a pasty ignorované shell jsou ignorovány

Příkaz vyvolaný v tomto samostatném prostředí nemůže mít vliv na prostředí prostředí shell.

Náhradní příkazy a asynchronní příkazy jsou vyvolávány v prostředí subshell, které je duplikát prostředí shellu, s výjimkou toho, že pasty chycené prostředí jsou resetovány na hodnoty, které shell zdědila od nadřazeného objektu při vyvolání. Builtin příkazy, které jsou vyvolány jako součást potrubí jsou také prováděny v prostředí subshell. Změny provedené v prostředí subshell nemohou ovlivnit prostředí prostředí shell.

Pokud je po příkazu následován příkazem & a kontrola úlohy není aktivní, výchozí standardní vstup příkazu je prázdný soubor / dev / null . V opačném případě vyvolaný příkaz zdědí deskriptory souborů volajícího shellu upravené přesměrováním.