Bash - Linux Command - Unix naredba

IME

bash - GNU Bourne-Again SHell

SINOPSIS

bash [opcije] [datoteka]

OPIS

Bash je sh- kompatibilni tumač naredbenog jezika koji izvršava naredbe pročitane iz standardnog unosa ili iz datoteke. Bash također uključuje korisne značajke iz Korn i C ljuske ( ksh i csh ).

Bash je namijenjen primjeni IEEE POSIX Shell and Tools specifikacija (IEEE Working Group 1003.2).

OPCIJE

Uz opcije ljuske s jednim znakom dokumentirane u opisu skupne ugrađene naredbe, bash tumači sljedeće opcije kada se poziva:

-c niz

Ako postoji opcija -c , tada se naredbe čitaju iz niza . Ako postoje argumenti nakon niza , dodjeljuju se pozicijski parametri, počevši od $ 0 .

-i

Ako je prisutna opcija -i , ljuska je interaktivna .

-l

Učinite bash učinite kao da je pozvana kao prijava (pogledajte SUSTAV u nastavku).

-r

Ako je prisutna opcija -r , ljuska postaje ograničena (pogledajte OGRANIČENA SHELL u nastavku).

-s

Ako je prisutna opcija -s , ili ako nema argumenata nakon obrade opcije, tada se naredbe čitaju iz standardnog ulaza. Ova opcija omogućuje postavljanje parametara položaja prilikom pozivanja interaktivne ljuske.

-D

Popis svih dvostrukih navodnika koji su prethodili $ bit će ispisani na standardni izlaz. Ovo su žice koje podliježu prijevodu jezika kada trenutni prostor nije C ili POSIX . To podrazumijeva opciju -n ; nijedna naredba neće biti izvršena.

[- +] O [ shopt_option ]

shopt_option je jedna od opcija oklopa koju je prihvatio shopt ugrađen (pogledajte SHELL BUILTIN COMMANDS u nastavku). Ako je prisutan shopt_option , -O određuje vrijednost te opcije; + O ga poništava. Ako shopt_option nije isporučen, nazivi i vrijednosti opcija ljuske koje je prihvatio shopt ispisuju se na standardnom izlazu. Ako je opcija poziva + O , izlaz se prikazuje u formatu koji se može ponovno upotrijebiti kao ulaz.

-

A - signalizira kraj opcija i onemogućuje daljnju obradu opcija. Bilo koji argumenti nakon - tretiraju se kao nazivi datoteka i argumenti. Argument - jednak je - .

Bash također tumači brojne opcije više znakova. Ove se opcije moraju pojaviti u naredbenom retku prije prepoznavanja opcija pojedinačnog znaka.

--dump-po-žice

Odgovara -D , ali izlaz je u formatu GNU gettext po (prijenosni objekt).

--dump-žice

Odgovara -D .

--Pomozite

Prikazati poruku o korištenju na standardnom izlazu i izaći uspješno.

--inf datoteke

- datoteku .fcfile

Izvršite naredbe iz datoteke umjesto standardne datoteke za osobnu inicijalizaciju ~ / .bashrc ako je ljuska interaktivna (pogledajte VEZANJE u nastavku).

--prijaviti se

Odgovara -1 .

--noediting

Nemojte koristiti GNU readline knjižnicu za čitanje naredbenog retka kada je ljuska interaktivna.

--noprofile

Nemojte čitati niti datoteku za pokretanje sustava / etc / profile niti bilo koji od osobnih datoteka za inicijalizaciju ~ / .bash_profile , ~ / .bash_login ili ~ / .profile . Prema zadanim postavkama, bash čita te datoteke kada se poziva kao ljuska za prijavu (pogledajte SUSTAV u nastavku).

--norc

Ne čitajte i izvršite osobnu datoteku za inicijalizaciju ~ / .bashrc ako je ljuska interaktivna. Ova je opcija uključena prema zadanim postavkama ako se ljuska poziva kao sh .

--posix

Promijenite ponašanje bash-a gdje se zadana operacija razlikuje od POSIX 1003.2 standarda kako bi odgovarala standardu ( posix mod ).

--ograničen

Shema je ograničena (pogledajte OGRANIČENA SHELL u nastavku).

--rpm-traži

Izradite popis datoteka koje su potrebne za skriptu ljuske za pokretanje. To podrazumijeva "-n" i podliježe istim ograničenjima kao što je sastavljanje provjere provjere pogrešaka vremena; Backticks, [] testovi i evals ne analiziraju se tako da se neke nedostupnosti mogu propustiti. --verbose Equivalent to -v .

--verzija

Prikažite informacije o verziji za ovaj primjer bash na standardnom izlazu i izađite uspješno.

Argumenti

Ako argumenti ostaju nakon obrade opcija, a ni opcija -c ni -s nije prenesena, pretpostavlja se da je prvi argument naziv datoteke koja sadrži naredbe ljuske. Ako se bash poziva na taj način, $ 0 je postavljeno na naziv datoteke, a položajni parametri postavljeni su na preostale argumente. Bash čita i izvršava naredbe iz ove datoteke, a zatim izlazi. Bashov izlazni status je izlazni status posljednje naredbe izvršene u skripti. Ako nijedna naredba ne bude izvršena, izlazni status je 0. Prvo se pokušava otvoriti datoteka u trenutnom direktoriju, a ako se ne pronađe datoteka, shema pretražuje mape u PATH za skriptu.

prizivanje

Shema za prijavu je ona čiji je prvi znak nulte argumentacije - - ili je započeo s opcijom --login .

Interaktivna ljuska je pokrenuta bez argumenata bez opcije i bez opcije -c, čiji standardni ulaz i izlaz su spojeni na stezaljke (kako je određeno izatty (3)), ili je započeo s opcijom -i . PS1 je postavljen i $ - uključuje i ako je bash interaktivan, omogućujući skriptu ljuske ili datoteku za pokretanje za testiranje tog stanja.

Sljedeći paragrafi opisuju kako bash izvršava svoje datoteke za pokretanje. Ako neka od datoteka postoji, ali se ne može čitati, bash izvješćuje o pogrešci. Tildi se proširuju u nazivima datoteka kao što je opisano u nastavku pod Tilde Expansion u odjeljku EXPANSION .

Kada se bash zove kao interaktivna ljuska za prijavu ili kao neinteraktivna ljuska s opcijom --login , prvo čita i izvršava naredbe iz / etc / profile datoteke, ako ta datoteka postoji. Nakon čitanja te datoteke, traži ~ / .bash_profile , ~ / .bash_login i ~ / .profile u tom redoslijedu i čita i izvršava naredbe od prvog koji postoji i koji je čitljiv. Opcija --noprofila može se koristiti kada se školjka pokrene kako bi spriječila ovo ponašanje.

Kada se shell za prijavu izlazi, bash čita i izvršava naredbe iz datoteke ~ / .bash_logout , ako postoji.

Kada se pokrene interaktivna ljuska koja nije shell za prijavu, bash čita i izvršava naredbe od ~ / .bashrc , ako ta datoteka postoji. To se može spriječiti pomoću opcije --norc . Datoteka --rcfile file će prisiliti bash da pročita i izvrši naredbe iz datoteke umjesto ~ / .bashrc .

Kada se bash pokrenu neinteraktivno, za pokretanje skripte ljuske, na primjer, traži varijablu BASH_ENV u okruženju, širi svoju vrijednost ako se on tamo pojavi i koristi proširenu vrijednost kao naziv datoteke za čitanje i izvršavanje , Bash se ponaša kao da je izvršena naredba:

ako [-n "$ BASH_ENV"]; onda. "$ BASH_ENV"; fi

ali se vrijednost PATH varijable ne koristi za traženje naziva datoteke.

Ako se bash naziva nazivom sh , pokušava oponašati početno ponašanje povijesnih verzija sh što je više moguće, dok je u skladu s POSIX standardom kao dobro. Kada se zove kao interaktivna ljuska za prijavu ili neinteraktivna ljuska s opcijom --login , prvo pokušava čitati i izvršiti naredbe iz / etc / profile i ~ / .profile , u tom redoslijedu. Opcija --noprofila može se koristiti za sprečavanje ovog ponašanja. Kada se poziva kao interaktivna ljuska s imenom sh , bash traži varijablu ENV , proširuje vrijednost ako je definirana i koristi proširenu vrijednost kao naziv datoteke za čitanje i izvršavanje. Budući da se ljuska koja se zove kao sh ne pokušava čitati i izvršavati naredbe s bilo koje druge datoteke za pokretanje, opcija --rcfile nema nikakvog učinka. Ne-interaktivna ljuska zazvana imenom sh ne pokušava čitati bilo koju drugu pokretnu datoteku. Kada se zove kao sh , bash ulazi u posix mod nakon čitanja datoteka za pokretanje.

Kada se bash pokrene u posix modu, kao i kod opcije --posex command line, slijedi POSIX standard za pokretanje datoteka. U ovom načinu rada, interaktivne ljuske proširuju ENV varijablu i naredbe se čitaju i izvode iz datoteke čije je ime proširena vrijednost. Nisu spremljene druge datoteke za pokretanje.

Bash pokušava utvrditi kada se upravlja demonstracijom udaljenog ljuske, obično rshd . Ako bash utvrdi da se pokreće rshd , čita i izvršava naredbe ~ / .bashrc , ako ta datoteka postoji i čitljiva. To neće učiniti ako se zove kao sh . Opcija --norc može se koristiti za sprečavanje ovog ponašanja, a opcija --rcfile može se koristiti za prisiljavanje druge datoteke za čitanje, ali rshd općenito ne poziva ljusku s tim opcijama ili ih dopušta da budu navedeni.

Ako se ljuska pokrene s korisničkim (grupnim) idom koji nije jednak stvarnom korisniku (grupi) id, a opcija -p nije isporučena, ne čitaju se datoteke za pokretanje, funkcije shell nisu naslijeđene iz okruženja, SHELLOPTS varijabla, ako se pojavljuje u okruženju, zanemaruje se, a efektivni korisnički ID postavljen je na pravi korisnički ID. Ako se opcija -p isporučuje na poziv, ponašanje pokretanja je isti, ali efektivni korisnički ID se ne resetira.

DEFINICIJE

Sljedeće definicije koriste se tijekom ostatka ovog dokumenta.

prazan

Prostor ili kartica.

riječ

Niz znakova koji se smatraju jednim jedinicom od ljuske. Također poznat kao token .

Ime

Riječ koja se sastoji samo od alfanumeričkih znakova i podcrtava, a počinje s abecednim znakom ili podcrtom. Također se naziva i identifikator .

metaznak

Lik koji, kada nije označen, razdvaja riječi. Jedno od sljedećeg:

| &; () <> karticu prostora

upravljački operator

Token koji obavlja kontrolnu funkciju. To je jedan od sljedećih simbola:

|| &&&; ;; () |

REZERVIRANE RIJEČI

Rezervirane riječi su riječi koje imaju posebno značenje za ljusku. Sljedeće riječi prepoznate su kao rezervirane kada nisu označene i prve riječi jednostavne naredbe (pogledajte SHELL GRAMMAR u nastavku) ili treću riječ slučaja ili naredbu:

! slučaj učinio elif drugo esac fi za funkciju ako je odabrano onda dok dok {} vrijeme [[]]

SHELL GRAMMAR

Jednostavne naredbe

Jednostavna naredba je redoslijed dodanih varijabilnih zadataka praćenih praznim riječima i preusmjeravanjem, a završen od strane kontrolnog operatora . Prva riječ određuje naredbu koju treba izvršiti i prosljeđuje kao argument nula. Preostale riječi prenose se kao argumenti na pozivnu naredbu.

Povratna vrijednost jednostavne naredbe je njezin izlazni status, ili 128+ n ako se naredba prekine signal n .

cjevovodi

Cjevovod je redoslijed jedne ili više naredbi odvojene znakom , Format za cjevovod je:

[ vrijeme [ -p ]] [! ] naredba [ | command2 ...]

Standardni izlaz naredbe povezan je pomoću cijevi na standardni ulaz komande2 . Ova se veza provodi prije bilo kakvih preusmjeravanja navedenih u naredbi (pogledajte REDIRECTION u nastavku).

Ako je rezervirana riječ ! prethodi cjevovod, izlazni status tog cjevovoda logično je NE od izlaznog statusa zadnje naredbe. U suprotnom, status cjevovoda je izlazni status posljednje naredbe. Shema čeka da sve naredbe u cjevovodu prestanu prije vraćanja vrijednosti.

Ako vrijeme rezervirana riječ prethodi cjevovodu, proteklo je vrijeme, kao i vrijeme i vrijeme korisnika i sustava koje se troši njegovo izvršenje, kada se cjevovod završi. Opcija -p mijenja izlazni format prema onom koji je odredio POSIX. Varijabla TIMEFORMAT može se postaviti na niz formata koji određuje kako treba prikazati podatke o vremenu; pogledajte opis TIMEFORMAT pod Shell varijablama u nastavku.

Svaka naredba u cjevovodu izvršava se kao zaseban proces (tj. U podskupu).

arena

Popis je redoslijed jednog ili više cjevovoda koje odvaja jedan od operatora ; , & , && , ili || i po izboru može biti prekinuta s jednim od ; , & , ili .

Od tih operatora popisa, && i || imaju jednaku prednost, a slijede ih ; i &, koji imaju jednaku prednost.

Na popisu se može pojaviti niz od jednog ili više novih linija umjesto točke-zarez da se ograniče naredbe.

Ako naredba prekine upravljački operator & , shema izvršava naredbu u pozadini u podskupu. Shema ne čeka da naredba završi, a status povratka je 0. Naredbe odvojene a ; izvršavaju se sekvencijalno; ljuska čeka da svaka naredba zauzme zauzvrat. Status povratka je izlazni status zadnje izvršene naredbe.

Kontrolni operatori && i || označavaju i popise i OR popise. I popis ima oblik

command1 && command2

command2 se izvršava ako i samo ako command1 vraća izlazni status nula.

OR popis ima oblik

command1 || command2

command2 se izvršava samo i ako naredba1 vraća status nestanka nula. Povratni status AND i OR popisa je izlazni status posljednje naredbe izvršene na popisu.

Komandne naredbe

Složena naredba je jedno od sljedećeg:

( popis )

popis se izvršava u podskupu. Varijabilne zadatke i ugrađene naredbe koje utječu na okruženje ljuske ne ostaju na snazi ​​nakon što naredba završi. Status povratka je izlazni status popisa .

{ list ; }

popis se jednostavno izvršava u trenutnom okruženju ljuske. popis mora biti prekinut s novim ili zareznim zarezom. Ovo je poznato kao skupina naredba . Status povratka je izlazni status popisa . Imajte na umu da su za razliku od metakaraktera ( i ) , { i } rezervirane riječi i moraju se pojaviti u slučaju da je dopuštena priznata rezervirana riječ. Budući da ne uzrokuju prekidne riječi, moraju biti odvojeni od popisa razmaka.

(( izraz ))

Izraz se ocjenjuje prema pravilima koja su opisana u daljnjem tekstu pod ARITHMETIC EVALUATION . Ako vrijednost izraza nije nula, status povrata je 0; u suprotnom povratni status je 1. To je točno jednako neka se " izraz ".

[[ izraz ]]

Vraćanje statusa 0 ili 1 ovisno o procjeni izrazu uvjetnog izraza . Izrazi se sastoje od primarnih opisa koji su opisani u nastavku u KONTUIRANOJ ISKAZNICI . Razdvajanje riječi i širenje polja ne izvode se na riječima između [[ i ]] ; proširenje tilda, parametar i varijabilno širenje, aritmetička ekspanzija, zamjena naredbe, supstitucija procesa i uklanjanje citata.

Kada se koriste operatori == i ! = , Niz koji se nalazi desno od operatera smatra se uzorkom i podudara se prema pravilima opisanim u nastavku u odjeljku Uzorak . Povratna vrijednost je 0 ako niz odgovara ili ne podudara se s obrascem, odnosno 1 inače. Bilo koji dio obrasca može se citirati kako bi se prisilio da se podudara s nizom.

Izrazi se mogu kombinirati pomoću sljedećih operatora, navedenih u redoslijedu redoslijeda:

( izraz )

Vraća vrijednost izraza . To se može upotrijebiti za nadjačavanje uobičajene prednosti operatera.

! izraz

Istina je li izraz pogrešan.

izraz1 && expression2

Istina je da su oba izraza1 i izraz2 istiniti.

izraz1 || expression2 Istina, ako je bilo izraz1 ili izraz2 istinito.

&& i || operatori ne procjenjuju izraz2 ako je vrijednost izražavanja1 dovoljna za određivanje povratne vrijednosti cjelokupnog uvjetnog izraza.

za ime [ u riječi ]; učiniti popis ; učinio

Popis riječi koji slijede se proširuje, generirajući popis stavki. Naziv varijable postavljen je na svaki element ovog popisa zauzvrat, a popis se izvršava svaki put. Ako je riječ izostavljena, za naredbu se izvršava lista jednom za svaki postavljeni parametar pozicije (pogledajte PARAMETERS u nastavku). Status povratka je izlazni status posljednje naredbe koja se izvršava. Ako širenje stavki koje slijede u rezultatima na prazan popis, nijedna naredba nije izvršena, a status povratka je 0.

za (( expr1 ; expr2 ; expr3 )); učiniti popis ; učinio

Prvo, aritmetička ekspresija expr1 se procjenjuje prema pravilima opisanim u nastavku pod ARITHMETIC EVALUATION . Aritmetička ekspresija expr2 se zatim vrednuje višekratno dok ne procijeni na nulu. Svaki put kada se vrijednost expr2 procjenjuje na vrijednost koja nije nula, izvršava se popis i aritmetička ekspresija expr3 se procjenjuje. Ako je bilo koji izraz izostavljen, ponaša se kao da procjenjuje na 1. Povratna vrijednost je izlazni status zadnje naredbe na popisu koji je izvršen ili lažan ako je neki od izraza nevažeći.

odaberite naziv [ u riječi ]; učiniti popis ; učinio

Popis riječi koji slijede se proširuje, generirajući popis stavki. Skup proširenih riječi tiskan je na standardnoj pogrešci, od kojih svako prethodi broj. Ako je riječ izostavljena, tiskani su pozicijski parametri (pogledajte PARAMETRI u nastavku). Potom se prikazuje PS3 prompt i linija koja se čita od standardnog ulaza. Ako se crta sastoji od broja koji odgovara jednoj od prikazanih riječi, vrijednost naziva postavljena je na tu riječ. Ako je linija prazna, riječi i redak se ponovno prikazuju. Ako se očita EOF, naredba završava. Bilo koja druga pročitana vrijednost uzrokuje da se naziv postavi kao null. Redak čuvanja spremljen je u varijabli REPLY . Popis se izvršava nakon svakog odabira dok se ne izvrši naredba za prekid . Izlazni status odabira je izlazni status posljednje naredbe izvršene na popisu , ili nula ako nijedna naredba nije izvršena.

slučajna riječ u [[(] uzorku [ | uzorak ]

Naredba slučaja prvo širi riječ i pokušava ga podudarati sa svakim uzorkom zauzvrat, koristeći iste pravila podudaranja kao i za proširenje staza (pogledajte proširenje Pathname u nastavku). Kada se pronađe utakmica, izvršava se odgovarajući popis . Nakon prve utakmice, nijedna naknadna utakmica nije pokušana. Izlazni status je nula ako se nijedan uzorak ne podudara. Inače, to je izlazni status posljednje naredbe izvršene na popisu .

ako je popis ; zatim popis; [ elif popis ; zatim popis ; ] ... [ drugi popis ; fi

Ako je popis izvršen. Ako je izlazni status nula, tada se izvršava popis . U suprotnom, svaka lista elifa izvršava se zauzvrat, a ako je izlazni status nula, tada se izvršava i odgovarajuća lista i naredba završava. U suprotnom se drugi popis izvršava, ako je prisutan. Izlazni status je izlazni status zadnje izvršene naredbe ili nula ako nijedan uvjet nije istinit.

dok popis ; učiniti popis ; učinio

do popisa ; učiniti popis ; učinio

Dok naredba neprekidno izvršava listu dokle god zadnja naredba na popisu vraća izlazni status nula. Dok je naredba identična naredbi za vrijeme , osim što je test negiran; popis obavlja se sve dok posljednja naredba na popisu vrati status nestanka nula. Izlazni status dok i dok naredbe je izlazni status posljednje izvršene naredbe popisa , ili nula ako nijedna nije izvršena.

[ function ] naziv () { popis ; }

To definira funkciju naziva imenom . Tijelo funkcije je popis naredbi između {i}. Ovaj popis izvršava se kad god je ime navedeno kao naziv jednostavne naredbe. Izlazni status funkcije je izlazni status posljednje naredbe izvršene u tijelu. (Pogledajte FUNCTIONS u nastavku.)

KOMENTARI

U neinteraktivnoj ljusci ili interaktivnoj ljusci u kojoj je omogućena opcija interactive_comments u ugrađenom sustavu shopt (vidi SHELL BUILTIN COMMANDS u nastavku), riječ koja počinje s # uzrokuje da se riječ i svi preostali znakovi na toj liniji zanemare. Interaktivna ljuska bez omogućene opcije interactive_comments ne dopušta komentare. Opcija interactive_comments uključena je prema zadanim postavkama u interaktivnim školjkama.

citirajući

Citanje se koristi za uklanjanje posebnog značenja određenih znakova ili riječi u ljusku. Citanje se može upotrijebiti za onemogućivanje posebnog tretmana za posebne znakove, kako bi se spriječilo prepoznavanje rezerviranih riječi kao takve i spriječilo širenje parametara.

Svaki od gore navedenih metakaraktera pod DEFINICIJE ima posebno značenje za ljusku i mora se citirati ako se predstavlja.

Kada se upotrebljavaju uređaji za proširenje povijesti zapovijedi, obično se pojavljuje povijest povijesti proširenja ! , mora se citirati kako bi se spriječilo širenje povijesti.

Postoje tri mehanizama citiranja: tip bijega , pojedinačni citati i dvostruke navodnike.

Ne-citirani povratni udarac ( \ ) je lik bijega . Ona čuva doslovnu vrijednost sljedećeg znaka koji slijedi, osim . Ako se pojavi naredba \ , a povratni poziv nije sama naveden, \ tretira se kao nastavak retka (tj. Uklanja se iz ulaznog toka i učinkovito se zanemaruje).

Prilikom dodavanja znakova u pojedinačnim citatima čuva se doslovna vrijednost svakog znaka unutar navodnika. Ni jedan citat ne smije se pojaviti između pojedinačnih navoda, čak i kada se prethodi povratni udarac.

Prilikom dodavanja znakova u dvostrukim citatima čuva se doslovna vrijednost svih znakova unutar navodnika, s izuzetkom $ , ` i \ . Likovi $ i ` zadržavaju svoje posebno značenje unutar dvostrukih citata. Pozadinsko zaglavlje zadržava svoje posebno značenje samo kada slijedi jedan od sljedećih znakova: $ , ` , " , \ ili . Dvostruki citat može se citirati u dvostrukim navodnicima tako da ga pretpregleda obrnutim redoslijedom.

Posebni parametri * i @ imaju posebno značenje u dvostrukim navodima (pogledajte PARAMETERS u nastavku).

Riječi oblika $ ' string ' posebno se tretiraju. Riječ se proširuje na niz , s znakovima koji se izbjegavaju unatrag, kao što je navedeno u ANSI C standardu. Sljedovi bijega iz bajki, ako postoje, dekodiraju se na sljedeći način:

\ a

upozorenje (zvono)

\ b

povratnik

\ e

tip bijega

\ f

ulaganje obrasca

\ n

nova linija

\ r

povrat prtljage

\ t

horizontalna kartica

\ v

vertikalna kartica

\\

Obrnuta kosa crta

\”

jednokratni citat

\ nnn

osambitni znak čija je vrijednost oktanska vrijednost nnn (jedna do tri znamenke)

\ x HH

osam bitova čija je vrijednost heksadecimalna vrijednost HH (jedna ili dvije heksadecimalne znamenke)

\ c x

kontrolni znak x

Prošireni rezultat je jednokratno, kao da dolarski znak nije bio prisutan.

Dvostruki navodni niz koji prethodi znak dolara ( $ ) uzrokuje da se niz pretvori u skladu s trenutačnom lokacijom. Ako je trenutni položaj C ili POSIX , znak dolara zanemaruje se. Ako je niz preveden i zamijenjen, zamjena se dvostruko navodi.

PARAMETRI

Parametar je entitet koji pohranjuje vrijednosti. To može biti naziv , broj ili neki od posebnih znakova navedenih ispod u Specijalnim parametrima . Za svrhe ljuske, varijabla je parametar označen nazivom . Varijabla ima vrijednost i nula ili više atributa . Atributi se dodjeljuju pomoću deklarirane ugrađene naredbe (pogledajte deklarirajte u SHELL BUILTIN COMMANDS ).

Parametar je postavljen ako je dodijeljena vrijednost. Null niz je važeća vrijednost. Nakon što je postavljena varijabla, može se isključiti samo pomoću neizravne ugrađene naredbe (pogledajte SHELL BUILTIN COMMANDS u nastavku).

Varijabla se može dodijeliti izjavom obrasca

naziv = [ vrijednost ]

Ako vrijednost nije dana, varijablu se dodjeljuje null string. Sve vrijednosti prolaze kroz tilde ekspanziju, parametar i varijabilnu ekspanziju, zamjenu naredbe, aritmetičku ekspanziju i uklanjanje citata (vidi EXPANSION u nastavku). Ako varijabla ima svoj cijeli skup atributa, tada vrijednost vrijedi za aritmetičku ekspanziju čak i ako se ekspanzija $ ((...)) ne koristi (pogledajte u nastavku Aritmetička ekspanzija ). Dijeljenje riječi nije izvedeno, osim "$ @" kako je objašnjeno u nastavku u odjeljku Posebni parametri . Ekspanzija putnog imena nije izvršena. Izjave o dodjeli mogu se pojaviti i kao argumenti za deklaraciju , sortiranje , izvoz , čitanje i lokalne ugrađene naredbe.

Položajni parametri

Pozicijski parametar je parametar označen s jednim ili više znamenki, osim jedne znamenke 0. Pozicionirani parametri se dodjeljuju iz argumenata ljuske kada se poziva, a može se preraditi pomoću naredbe ugrađene. Položajni parametri se ne mogu dodijeliti izjavama dodjele. Pozicijski parametri se privremeno zamjenjuju kada se izvodi funkcija ljuske (pogledajte FUNKCIJE u nastavku).

Kada se prostorni parametar koji se sastoji od više od jedne znamenke se širi, mora biti zatvoren u braces (vidi EXPANSION u nastavku).

Posebni parametri

Shema posebno obrađuje nekoliko parametara. Ti se parametri mogu navoditi samo na referencama; nije dopušten njihov dodjeljivanje.

*

Proširuje se na pozicijske parametre, počevši od jednog. Kada se ekspanzija odvija u okviru dvostrukih navodnika, proširuje se na jednu riječ s vrijednošću svakog parametra odijeljenog prvim znakom posebne varijable IFS . To jest, " $ * " odgovara " $ 1 c $ 2 c ... ", gdje je c prvi znak vrijednosti IFS varijable. Ako IFS nije podešen, parametri su odvojeni razmakom. Ukoliko je IFS null, parametri se spajaju bez intervencijskih separatora.

@

Proširuje se na pozicijske parametre, počevši od jednog. Kada se ekspanzija odvija unutar dvostrukih navodnika, svaki se parametar širi u zasebnu riječ. To znači da " $ @ " odgovara " $ 1 " " $ 2 " ... Kada nema pozicijskih parametara, " $ @ " i $ @ šire se na ništa (tj. Uklanjaju se).

#

Proširuje se na broj pozicijskih parametara u decimalu.

?

Proširuje se statusom posljednjeg izvršnog cjevovoda u prvom planu.

-

Proširuje se na trenutne opcijske zastavice kako je određeno na poziv, po setu ugrađene naredbe ili one koje je postavila sama školjka (kao što je opcija -i ).

$

Proširuje se na ID procesa ljuske. U () podskupu, ona se proširuje na ID procesa trenutne ljuske, a ne podskup.

!

Proširuje ID procesa najnovije izvršene pozadinske (asinkroni) naredbe.

0

Proširuje se na ime skripte ljuske ili ljuske. Ovo je postavljeno na inicijalizaciju ljuske. Ako se bash poziva s datotekom naredbi, $ 0 je postavljeno na naziv te datoteke. Ako bash započne s opcijom -c , tada je $ 0 postavljen na prvi argument nakon što se niz koji treba izvršiti, ako je prisutan. Inače, postavljen je na naziv datoteke koji se koristi za pozivanje bash , kao što je dano argumentom nula.

_

Pri pokretanju ljuske postavite na apsolutnu nazivu datoteke skripte ljuske ili ljuske koja se izvršava kao što je prošla na popisu argumenta. Zatim se proširuje na zadnji argument na prethodnu naredbu nakon proširenja. Također postavite na punu naziv datoteke svake izvršene naredbe i stavite u okruženje koje se izvozi u tu naredbu. Prilikom provjere e-pošte taj parametar zadržava naziv datoteke e-pošte koja se trenutno provjerava.

Shell varijable

Shema je postavila sljedeće varijable:

BASH

Proširuje se do punog naziva datoteke koji se koristi za pozivanje ove instance basha .

BASH_VERSINFO

Jednostavna varijabla polja čiji članovi imaju informacije o verziji za ovaj primjer bash . Vrijednosti dodijeljene članovima polja su sljedeće:

BASH_VERSINFO [ 0]

Glavni broj verzije ( izdanje ).

BASH_VERSINFO [ 1]

Manja broj inačice ( verzija ).

BASH_VERSINFO [ 2]

Razina zakrpe.

BASH_VERSINFO [ 3]

Izgradnja verzije.

BASH_VERSINFO [ 4]

Status otpuštanja (npr. Beta1 ).

BASH_VERSINFO [ 5]

Vrijednost MAKTYPE .

BASH_VERSION

Proširuje se na niz koji opisuje verziju ove instance basha .

COMP_CWORD

COMP_LINE

Trenutačna naredba. Ova je varijabla dostupna samo u funkcijama ljuske i vanjskim naredbama koje se pokreću programiranim završnim uređajima (vidi Programirano dovršavanje u nastavku).

COMP_POINT

COMP_WORDS

Varijabla polja (pogledajte odjeljke u nastavku) koji se sastoje od pojedinačnih riječi u trenutnoj naredbenoj liniji. Ova je varijabla dostupna samo u funkcijama oklopa koje su pozvali programirani završni uređaji (pogledajte Programirano dovršavanje u nastavku).

DIRSTACK

Varijabla polja (pogledajte odjeljke u nastavku) koji sadrže trenutni sadržaj reda direktorija. Imenici se pojavljuju u snopu u redoslijedu kojim se prikazuju ugrađeni dirs . Dodjeljivanje članovima ove varijable polja može se upotrijebiti za izmjenu direktorija već u snopu, ali pushd i popd buildins moraju se koristiti za dodavanje i uklanjanje direktorija. Dodjela ove varijable neće promijeniti trenutni direktorij. Ako DIRSTACK nije postavljen, gubi posebna svojstva, čak i ako se naknadno resetira.

EUID

Proširuje se na učinkovit korisnički ID trenutnog korisnika, inicijaliziran pri pokretanju ljuske. Ova je varijabla samo za čitanje.

FUNCNAME

Naziv bilo koje funkcije ljuske koja se trenutno izvodi. Ova varijabla postoji samo kada se izvršava funkcija ljuske. Zadatke FUNCNAME nema učinka i vraćaju status pogreške. Ako FUNCNAME nije postavljen, gubi posebna svojstva, čak i ako se naknadno resetira.

GRUPE

Varijabla polja koja sadrži popis grupa čiji je trenutačni korisnik član. Dostavnice u grupa nemaju učinka i vraćaju status pogreške. Ako GRUPE nije postavljeno, gubi posebna svojstva, čak i ako se naknadno resetira.

HISTCMD

Povijest broja, ili indeks u popisu povijesti, trenutne naredbe. Ako HISTCMD nije postavljen, gubi posebna svojstva, čak i ako se naknadno resetira.

HOSTNAME

Automatski postavite na ime trenutnog računala.

HOSTTYPE

Automatski postavite na niz koji jedinstveno opisuje vrstu stroja na kojem bash izvršava. Zadana je ovisna o sustavu.

LINENO

Svaki put kada se ovaj parametar upućuje, ljuska zamjenjuje decimalni broj koji predstavlja trenutni redni broj redaka (počevši od 1) unutar skripte ili funkcije. Kada nije u skripti ili funkciji, zamijenjena vrijednost nije zajamčena da ima smisla. Ako LINENO nije postavljen, gubi posebna svojstva, čak i ako se naknadno resetira.

MACHTYPE

Automatski postavite na niz koji u potpunosti opisuje vrstu sustava na kojem bash izvršava, u standardnom formatu sustava GNU CPU-tvrtke . Zadana je ovisna o sustavu.

OLDPWD

Prethodni radni imenik koji je postavljen naredbom cd .

OPTARG

Vrijednost argumenta posljednje opcije koju obrađuje getopts builtin naredba (pogledajte SHELL BUILTIN COMMANDS u nastavku).

OPTIND

Indeks sljedećeg argumenta kojeg obrađuje getopts builtin naredba (pogledajte SHELL BUILTIN COMMANDS u nastavku).

OSTYPE

Automatski postavite na niz koji opisuje operativni sustav na kojem bash radi. Zadana je ovisna o sustavu.

PIPESTATUS

Varijabla polja (pogledajte odjeljke u nastavku) sadrži popis vrijednosti izlaznih statusa iz procesa u već najnovijem prvom planu cjevovoda (koji može sadržavati samo jednu naredbu).

PPID

ID procesa roditelja ljuske. Ova je varijabla samo za čitanje.

OSI

Trenutni radni imenik koji je postavljen naredbom cd .

RANDOM

Svaki put kada se navedeni parametar navodi, generiran je slučajni cijeli broj između 0 i 32767. Redoslijed slučajnih brojeva može se inicijalizirati dodjeljivanjem vrijednosti RANDOM . Ako je RANDOM isključen, gubi posebna svojstva, čak i ako se naknadno resetira.

ODGOVOR

Postavite na liniju unosa koji se očitava čitanjem ugrađene naredbe kada se ne isporučuju argumenti.

SEKUNDI

Svaki put kada se navedeni parametar upućuje, vraća se broj sekundi nakon poziva ljuske. Ako se vrijednost dodjeljuje SECONDS , vrijednost koja se vraća nakon sljedećih referenci je broj sekundi od dodjele plus dodijeljene vrijednosti. Ako SECONDS nije postavljen, gubi posebna svojstva, čak i ako se naknadno resetira.

SHELLOPTS

Popis zaraženih dvotočkom omogućenih opcija ljuske. Svaka riječ na popisu valjani je argument za -o opciju skupu ugrađenu naredbu (pogledajte SHELL BUILTIN COMMANDS u nastavku). Opcije koje se pojavljuju u SHELLOPTS-u su one prijavljene kao na set -o . Ako se ova varijabla nalazi u okruženju kada se pokrene sonda , svaka opcija ljuske na popisu će biti omogućena prije čitanja bilo kakvih pokretanja. Ova je varijabla samo za čitanje.

SHLVL

Povećava se po jedan svaki put kad započne instancu bash .

UID

Proširuje se na korisnički ID trenutnog korisnika, inicijaliziran pri pokretanju ljuske. Ova je varijabla samo za čitanje.

Školjka koristi sljedeće varijable. U nekim slučajevima, bash dodjeljuje zadanu vrijednost varijabli; ovi slučajevi su navedeni u nastavku.

BASH_ENV

Ako je ovaj parametar postavljen kada bash izvodi skriptu ljuske, njegova vrijednost se tumači kao naziv datoteke koji sadrži naredbe za inicijalizaciju ljuske, kao u ~ / .bashrc . Vrijednost BASH_ENV podložna je ekspanziji parametra, zamjeni naredbi i aritmetičkoj ekspanziji prije nego što se interpretira kao naziv datoteke. PATH se ne koristi za traženje rezultanta naziva datoteke.

CDPATH

Put pretraživanja za naredbu cd . Ovo je popis direktorija odvojen od dvotočke u kojem shema traži odredišne ​​direktorije navedene u naredbi cd . Vrijednost uzorka je ".: ~: / Usr".

COLUMNS

Koristi se pomoću odabrane ugrađene naredbe za određivanje širine terminala prilikom ispisa popisa odabira. Automatski postaviti po primitku SIGWINCH.

COMPREPLY

Varijabla polja iz koje bash čita moguće izvršenje koje generira funkcija ljuske koja se zove programski završni objekt (vidi Programabilno dovršavanje u nastavku).

FCEDIT

Zadani uređivač za naredbu fc builtin.

FIGNORE

Lista zaliha sufiksa zasebno zanemarenih tijekom izvođenja popisa datoteka (pogledajte READLINE u nastavku). Naziv datoteke čiji sufiks odgovara jednom od unosa u FIGNORE isključen je iz popisa podudarnih datoteka. Vrijednost uzorka je ".o: ~".

GLOBIGNORE

List s uzorcima odvojenim od dvotočke koji određuje skup imena datoteka koji se zanemaruju širenjem staza. Ako se naziv datoteke koji se podudara s obrazacom proširenja staze odgovara jednom od obrasca u GLOBIGNORE , uklanja se s popisa podudaranja.

HISTCONTROL

Ako je postavljeno na vrijednost ignorespace , linije koje počinju sa znakom prostora nisu unesene na popis povijesti. Ako je postavljeno na vrijednost zanemarenih redaka, unose se retci koji odgovaraju zadnjem retku povijesti. Vrijednost ignoreboth kombinira dvije opcije. Ako je ne postavljeno ili ako je postavljeno na bilo koju drugu vrijednost od gore navedenih, sve retke koje je pročitao parser spremaju se na popisu povijesti, ovisno o vrijednosti HISTIGNORE . Funkciju ove varijable zamjenjuje HISTIGNORE . Druga i sljedeća retka višerazredne naredbe spojeva nisu testirana i dodaju se u povijest bez obzira na vrijednost HISTCONTROL .

HISTFILE

Naziv datoteke u kojoj se sprema povijest naredbi (pogledajte POVIJEST u nastavku). Zadana vrijednost je ~ / .bash_history . Ako se ne postavi, povijest naredbi se neće spremiti kada izlazi interaktivna ljuska.

HISTFILESIZE

Maksimalni broj redaka koji se nalaze u datoteci povijesti. Kada se ta varijabla dodjeljuje vrijednost, datoteka povijesti skraćena je, ako je potrebno, da ne sadrži više od tog broja redaka. Zadana je vrijednost 500. Datoteka povijesti također je prekinuta na ovu veličinu nakon što je napiše kada izlazi interaktivna ljuska.

HISTIGNORE

List s uzorcima odvojenim od dvotočke koristi se za odlučivanje koje zapovjedne linije trebaju biti spremljene na popisu povijesti. Svaki uzorak je usidren na početku retka i mora se podudarati s cjelokupnom linijom (bez dodavanja implicitnog " * "). Svaki uzorak se testira protiv crte nakon što se primjenjuju provjere koje je odredio HISTCONTROL . Pored normalnih znakova podudaranja obrasca ljuske, ` & 'odgovara prethodnom retku povijesti. ` & 'može se izbjeći pomoću obrnutog polja; povratni udarac se uklanja prije pokušaja utakmice. Druga i sljedeća retka višerazredne naredbe za spajanje nisu testirana i dodaju se u povijest bez obzira na vrijednost HISTIGNORE .

HISTSIZE

Broj naredbi koje treba zapamtiti u povijesti naredbi (pogledajte POVIJEST u nastavku). Zadana vrijednost je 500.

DOM

Kućni imenik trenutnog korisnika; zadani argument za cd builtin naredbu. Vrijednost ove varijable se također koristi pri izvođenju tilde ekspanzije.

HOSTFILE

Sadrži naziv datoteke u istom formatu kao / etc / hosts koji bi trebao biti pročitan kada shell mora dovršiti naziv hosta. Popis mogućih dovršetaka glavnog računala može se mijenjati dok je ljuska pokrenuta; kada se sljedeći put pokušate izvršiti završetak glavnog računala nakon što se vrijednost promijeni, bash dodaje sadržaj nove datoteke na postojeći popis. Ako je HOSTFILE postavljen, ali nema vrijednost, bash pokušava čitati / etc / hosts kako bi nabavio popis mogućih izvršenja glavnog računala. Kada HOSTFILE nije podešen , popis glavnog računala se briše.

IFS

Unutarnji razdjelnik polja koji se koristi za cijepanje riječi nakon ekspanzije i razdvajanje linija u riječi sa čitanjem ugrađene naredbe. Zadana vrijednost je `` ''.

IGNOREEOF

Kontrolira djelovanje interaktivne ljuske po primitku znaka EOF kao jedini ulaz. Ako je postavljena, vrijednost je broj uzastopnih EOF znakova koji moraju biti upisani kao prvi znakovi na ulaznoj liniji prije izlaska iz zabave. Ako varijabla postoji, ali nema numeričku vrijednost ili nema vrijednost, zadana je vrijednost 10. Ako ne postoji, EOF označava kraj unosa u ljusku.

INPUTRC

Naziv datoteke za datoteku za pokretanje linije za čitanje , nadjačavajući zadanu vrijednost ~ / .inputrc (pogledajte READLINE u nastavku).

LANG

Koristi se za određivanje kategorije oglasnih mjesta za kategoriju koja nije posebno odabrana s varijablom koja počinje s LC_ .

LC_ALL

Ova varijabla nadjačava vrijednost LANG i bilo koje druge LC_ varijable koje određuju kategoriju mjesta.

LC_COLLATE

Ova varijabla određuje redoslijed raspoređivanja koji se koristi prilikom razvrstavanja rezultata ekspanzije putanja i određuje ponašanje izraza raspona, klasa ekvivalencije i uspoređivanje sekvenci unutar proširenja staza i podudaranja uzoraka.

LC_CTYPE

Ova varijabla određuje tumačenje znakova i ponašanje klasa karaktera unutar proširenja staza i podudaranja uzoraka.

LC_MESSAGES

Ova varijabla određuje položaj koji se upotrebljava za prevođenje dvostrukih navodnih nizova, a prethodi ga $ .

LC_NUMERIC

Ova varijabla određuje kategoriju mjesta koja se koristi za formatiranje brojeva.

LINIJE

Koristi se odabirom ugrađene naredbe za određivanje duljine stupca za ispisivanje popisa odabira. Automatski postaviti po primitku SIGWINCH.

MAIL

Ako je ovaj parametar postavljen na naziv datoteke i MAILPATH varijabla nije postavljena, bash obavještava korisnika o dolasku pošte u navedenu datoteku.

MAILCHECK

Određuje koliko često (u sekundama) bash provjerava poštu. Zadana je 60 sekundi. Kada je vrijeme za provjeru pošte, školjka to čini prije nego što prikaže primarni upit. Ako ova varijabla nije postavljena ili je postavljena na vrijednost koja nije broj veći od ili jednak nuli, ljuska onemogućuje provjeru pošte.

MAILPATH

Popis s nazivima datoteka odvojenih od dvotočke koji će se provjeravati za poštu. Poruka koja će se ispisati kada se pošta stigne u određenu datoteku može se odrediti razdvajanjem naziva datoteke iz poruke s "?". Kada se koristi u tekstu poruke, $ _ proširuje se na naziv trenutne datoteke. Primjer:

MAILPATH = '/ var / mail / bfox? "Imate poštu": ~ / shell-mail? "$ _ Ima poštu!"'

Bash opskrbljuje zadanu vrijednost za ovu varijablu, no lokacija korisničkih datoteka e-pošte koju upotrebljava ovisi o sustavu (npr., / Var / mail / $ USER ).

OPTERR

Ako je postavljena na vrijednost 1, bash prikazuje poruke o pogreškama koje generira getopts builtin naredba (pogledajte SHELL BUILTIN COMMANDS u nastavku). OPTERR inicijalizira se na 1 svaki put kad se poziva ljuska ili se izvršava shema skripte.

STAZA

Put traga za naredbama. To je liste direktorija odvojenih od dvotočke u kojima shema traži naredbe (pogledajte COMMAND EXECUTION u nastavku). Zadani put ovisi o sustavu, a postavlja ga administrator koji instalira bash . Zajednička vrijednost je `` / usr / gnu / bin: / usr / local / bin: / usr / ucb: / bin: / usr / bin :. ''.

POSIXLY_CORRECT

Ako se ova varijabla nalazi u okruženju kada bash počinje, ljuska ulazi u način posix prije čitanja datoteka za pokretanje, kao da je opcija " posice poziva "bila isporučena. Ako je postavljena dok je ljuska pokrenuta, bash omogućuje posix mod , kao da je izvršena naredba set -o posix .

PROMPT_COMMAND

Ako je postavljeno, vrijednost se izvršava kao naredba prije izdavanja svakog primarnog upita.

PS1

Vrijednost ovog parametra je proširena (pogledajte PROMPTING u nastavku) i upotrijebljen kao primarni naredbeni redak. Zadana vrijednost je `` \ s- \ v \ $ ''.

PS2

Vrijednost ovog parametra se proširuje kao kod PS1 i koristi se kao sekundarni promptni niz. Zadana postavka je `` > ''.

PS3

Vrijednost tog parametra koristi se kao upit za odabir naredbu (pogledajte SHELL GRAMMAR gore).

PS4

Vrijednost ovog parametra se proširuje kao kod PS1 i vrijednost se ispisuje prije nego što se svaka naredba bash prikaže tijekom traga izvršenja. Prvi znak PS4 replicira se više puta, po potrebi, kako bi se naznačilo više razina usmjerenosti. Zadana postavka je " + ".

VREMENSKI FORMAT

Vrijednost ovog parametra se koristi kao niz formata koji specificira kako treba prikazati podatke o vremenu za cjevovode predefinirane vremenskom rezerviranom riječi. % Znak unosi izlazni slijed koji se proširuje na vremensku vrijednost ili druge informacije. Sljedovi bijega i njihova značenja su kako slijedi; potpornji označavaju dodatne dijelove.

%%

Doslovni % .

% [ p ] [l] R

Proteklo vrijeme u sekundama.

% [ p ] [l] U

Broj CPU sekundi potrošen u korisničkom načinu rada.

% [ p ] [l] S

Broj CPU sekundi potrošen u načinu rada sustava.

% P

Postotak procesora izračunat kao (% U +% S) /% R.

Opcija p je znamenka koja određuje preciznost , broj frakcijskih znamenaka nakon decimalne točke. Vrijednost od 0 ne uzrokuje izračunavanje decimalne točke ili frakcije. Može se navesti najviše tri mjesta nakon decimalne točke; vrijednosti p veće od 3 se mijenjaju u 3. Ako p nije naveden, koristi se vrijednost 3.

Opcija l određuje duži format, uključujući minute, obrasca MM m SS . FF s. Vrijednost p određuje je li frakcija uključena ili ne.

Ako ova varijabla nije postavljena, bash djeluje kao da ima vrijednost $ '\ nreal \ t% 3lR \ nuser \ t% 3lU \ nsys% 3lS' . Ako je vrijednost nula, nema podataka o vremenu. Kada se prikaže formatni niz, dodaje se novi redak koji se prati.

TMOUT

Ako je postavljeno na vrijednost veću od nule, TMOUT se tretira kao zadani vremenski rok za ugrađenu opremu . Odabir naredbe završava ako ulaz ne dođe nakon TMOUT sekundi kada ulaz dolazi iz terminala. U interaktivnoj ljusci vrijednost se tumači kao broj sekundi čekanja za unos nakon izdavanja primarnog upita. Bash prestaje čekati taj broj sekundi ako unos ne stigne.

auto_resume

Ova varijabla upravlja načinom interakcije ljuske s korisnikom i kontrolom posla. Ako je ova varijabla postavljena, jednostavne naredbe jedne riječi bez preusmjeravanja tretiraju se kao kandidati za nastavak postojećeg zaustavljenog posla. Ne postoji dvostruko dopušteno; ako postoji više od jednog zadatka koji započinje s nizom upisanom, odabran je najnoviji zadani posao. Naziv zaustavljenog posla, u ovom kontekstu, je zapovjedna linija kojom se pokreće. Ako je postavljena na točno vrijednost, isporučeni niz mora točno odgovarati nazivu zaustavljenog posla; ako je postavljeno na podnizu , isporučeni niz mora odgovarati podnizici naziva zaustavljenog posla. Vrijednost substringa pruža funkcionalnost koja je analogna %? identifikator posla (pogledajte JOB CONTROL u nastavku). Ako je postavljeno na bilo koju drugu vrijednost, isporučeni niz mora biti predbroj imena zaustavljenog posla; to pruža funkcionalnost koja je analogna % identifikatoru posla.

histchars

Dva ili tri znaka koji kontroliraju povijest proširenja i tokenizacije (pogledajte POVEĆANJE EXPANSION u nastavku). Prvi znak je povijesni karakter proširenja , znak koji signalizira početak proširenja povijesti, obično ` ! ”. Drugi znak je brz zamjenski znak, koji se koristi kao stenograf za ponovno pokretanje prethodne naredbe unesene, zamjenjujući jedan niz drugu u naredbi. Zadana je " ^ ". Dodatni treći znak je znak koji označava da je ostatak retka komentar kada se nađe kao prvi znak neke riječi, obično " # ". Karakter povijesti povijesti uzrokuje preskakanje povijesti za preostale riječi na liniji. To ne mora nužno uzrokovati da analitičar ljuske tretira ostatak retka kao komentar.

nizovi

Bash pruža jednodimenzionalne varijable polja. Svaka varijabla može se koristiti kao niz; izjaviti izgrađen će izričito proglasiti niz. Ne postoji maksimalno ograničenje veličine polja, niti bilo koji zahtjev da se članovi budu indeksirani ili dodijeljeni kontinuirano. Nizovi se indeksiraju pomoću cijeli brojevi i nula su bazirani.

Polje se automatski stvara ako se bilo koja varijabla dodjeljuje korištenjem naziva sintakse [ subscript ] = vrijednost . Indeks se tretira kao aritmetička ekspresija koja mora procijeniti na broj veći od ili jednak nuli. Da biste eksplicitno proglasili niz, upotrijebite deklarirati ime (pogledajte SHELL BUILTIN COMMANDS u nastavku). izjavljuje se i naziv [ subscript ]; indeks je zanemaren. Atributi se mogu navesti za varijablu polja pomoću deklarata i readonly builtins. Svaki atribut vrijedi za sve članove polja.

Rasporedi se dodjeljuju korištenjem složenih zadataka naziva oblika = ( vrijednost 1 ... vrijednost n ) , pri čemu je svaka vrijednost oblika [ subscript ] = string . Potrebno je samo niz . Ako se isporučuju dodatne zagrade i indeks, indeks se dodjeljuje; inače indeks dodijeljenog elementa je zadnji indeks dodijeljen izjavom plus jedan. Indeksiranje počinje na nuli. Ova sintaksa također prihvaća deklaracija izgrađena. Pojedinačni element polja može se dodijeliti upotrebi naziva [ subscript ] = sintaksa vrijednosti koji je gore naveden.

Unset builtin koristi se za uništenje polja. unset name [ subscript ] uništava element polja indeksnog indeksa. unset ime , gdje je naziv polje ili unset name [ subscript ], gdje je indeks * ili @ , uklanja cijeli niz.

Deklariraju , lokalni i readonly ugrađeni svaki prihvatiti -a- opciju za određivanje polja. Ugrađeno za čitanje prihvaća opciju -a za dodjeljivanje popisa riječi pročitanih iz standardnog unosa u niz. Skup i deklarirati builtins prikazuju vrijednosti polja na način koji im omogućuje da se ponovno koriste kao zadatke.

ŠIRENJE

Proširenje se izvodi na naredbenoj liniji nakon što je podijeljena u riječi. Izvršeno je sedam vrsta ekspanzije: ekspanziju oslonca, proširenje tilda , parametar i varijabilno širenje , zamjena naredbe , aritmetička ekspanzija , razdvajanje riječi i širenje staze .

Redoslijed ekspanzija je: ekspanzija zatvarača, ekspanzija tilda, parametar, varijabilna i aritmetička ekspanzija i zamjena naredbe (učinjeno lijevo-desno), razdvajanje riječi i proširenje staze.

Na sustavima koji ga podržavaju, postoji dodatna proširenja dostupna: zamjena procesa .

Proširenje nagiba

Ekspanzija oklopa je mehanizam kojim se mogu proizvesti proizvoljne žice. Taj je mehanizam sličan proširenju staza , ali generirani nazivi datoteka ne moraju postojati. Obrasci koje treba proširiti imaju oblik neobveznog preambula , nakon čega slijedi niz žica odvojene zarezima između par bracesa, nakon čega slijedi dodatni postscript . Preambula je prefiksana na svaki niz koji se nalazi unutar braces, a postscript se dodaje svakom rezultatu nizu, širi se od lijeva do desno.

Proširenja držača mogu biti ugniježđena. Rezultati svakog proširenog niza nisu sortirani; sačuvan je redoslijed slijeva nadesno. Na primjer, { d, c, b } e proširuje se u 'ade ace abe'.

Proširenje držača izvodi se prije bilo kakvih drugih proširenja, a svi ostali znakovi posebni za ostala proširenja sačuvani su u rezultatima. To je strogo tekstualno. Bash ne primjenjuje nikakvu sintaktičku interpretaciju u kontekstu ekspanzije ili teksta između bracesa.

Ovaj konstrukt obično se koristi kao stenografski kada je zajednički prefiks žice koji se generiraju duži nego u gornjem primjeru:

mkdir / usr / local / src / bash / {stari, novi, dist, bugovi}

ili

chown korijen /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

Širenje braće uvodi malu nespojivost s povijesnim verzijama š . sh ne tretira otvaranje ili zatvaranje zaglavlja posebno kada se pojavljuju kao dio riječi i čuva ih u izlazu. Bash uklanja braces od riječi kao posljedica ekspanzije braće. Na primjer, riječ unesena u sh kao datoteku {1,2} pojavljuje se jednako u izlazu. Ista riječ izlazi kao file1 file2 nakon proširenja bash . Ako je poželjna striktna kompatibilnost s sh , počnite bash s opcijom + B ili isključite proširenje okvira s opcijom + B na postavljenu naredbu (pogledajte SHELL BUILTIN COMMANDS u nastavku).

Proširenje tilde

Ako riječ započinje s nekotiranim znakom tilda (` ~ '), svi znakovi koji prethode prvoj neprimijenjenoj crtici (ili svi znakovi, ako nema neradne crte) smatraju se prefixom za tilde . Ako se ne navode niti jedan od znakova u predbroju s tildom, znakovi u tildinskom prefiksu koji slijedi tilde tretiraju se kao mogući naziv za prijavu . Ako je ovo ime za prijavu null string, tilda se zamjenjuje vrijednost parametra ljuske HOME . Ako je HOME isključena, umjesto toga zamjenjuje se kućni imenik korisnika koji izvršava ljusku. U suprotnom, prefiks tilda zamjenjuje se kućnim imenikom povezanim s navedenim nazivom za prijavu.

Ako je prefiks tilda `~ + ', vrijednost varijable ljuske PWD zamjenjuje prefiks tilda. Ako je prefiks tilda `~ - ', zamijenjena je vrijednost varijable ljuske OLDPWD , ako je postavljena. Ako znakovi koji slijede tilda u prečmu s tildom sastoje od broja N , po izboru prefiksnim znakom "+" ili "-", prefiks tilda zamjenjuje se odgovarajućim elementom iz reda direktorija, kao što će biti prikazan po dirs builtin pozvan s tilde-prefiks kao argument. Ako znakovi koji slijede tilda u prečmu s tildom sastoje se od broja bez vodećeg "+" ili "-", pretpostavlja se "+".

Ako ime za prijavu nije važeće, ili širenje tilde ne uspije, riječ je nepromijenjena.

Svaka dodjela varijabli provjerava se za nedozvoljene tilde prefikse odmah nakon : ili = . U tim se slučajevima izvodi i ekspanzija tilda. Prema tome, može se koristiti nazive datoteka s tildima u zadacima PATH , MAILPATH i CDPATH , a ljuska dodjeljuje proširenu vrijednost.

Proširenje parametara

Karakter " $ " uvodi ekspanziju parametara, zamjenu naredbe ili aritmetičku ekspanziju. Naziv parametra ili simbol koji se treba proširiti mogu biti zatvoreni u zagradama, koji su neobvezni, ali služe za zaštitu širenja varijable od znakova koji ih neposredno slijede, što bi se moglo tumačiti kao dio naziva.

Kada se upotrebljavaju zagrade, podudarni završni zagradni prsten je prvi koji } nije izbjegao unatrag ili unutar citiranog niza, a ne unutar ugrađene aritmetičke ekspanzije, zamjene naredbe ili ekspanzije paramtera.

Vrijednost parametra je zamijenjena. Braces su potrebni kada je parametar pozicijski parametar s više od jedne znamenke ili kada parametar slijedi znak koji se ne smije tumačiti kao dio njegova imena.

U svakom od dolje navedenih slučajeva riječ je podložna ekspanziji tilda, proširenju parametara, zamjeni naredbi i aritmetičkom širenju. Ako ne izvodite ekspanziju podskupine, bash testa za parametar koji je neizrađen ili null; izostavljanje debelog crijeva rezultira testom samo za parametar koji nije podešen.

Upotrijebi zadane vrijednosti . Ako je parametar poništen ili null, proširenje riječi je zamijenjeno. Inače, vrijednost parametra je zamijenjena.

Dodijeli zadane vrijednosti . Ako je parametar poništen ili null, širenje riječi dodjeljuje se parametru . Vrijednost parametra je zatim zamijenjena. Na ovaj način se ne mogu dodijeliti položajni parametri i posebni parametri.

Pogreška prikaza ako je Null ili Unset . Ako je parametar null ili unset, širenje riječi (ili poruka u tom slučaju ako riječ nije prisutna) zapisuje se na standardnu ​​pogrešku, a ljuska, ako nije interaktivna, izlazi. Inače, vrijednost parametra je zamijenjena.

Upotrijebite zamjensku vrijednost . Ako je parametar null ili unset, ništa nije zamijenjeno, inače je proširenje riječi zamijenjeno.

Proširuje se nazivima varijabli čija imena počinju prefiksom , odvojena prvim znakom posebne varijable IFS .

Duljina u znakovima vrijednosti parametra je zamijenjena. Ako je parametar * ili @ , zamijenjena vrijednost je broj pozicijskih parametara. Ako je parametar naziv polja podcrtan s * ili @ , zamijenjena vrijednost je broj elemenata u polju.

Riječ se proširuje kako bi proizvela uzorak kao u proširenju staza. Ako uzorak odgovara početku vrijednosti parametra , rezultat ekspanzije je proširena vrijednost parametra s najkraćim uzorkom (primjer "slučaja" # ") ili najduljeg podudarnog uzorka (" ## " "slučaj") izbrisan. Ako je parametar @ ili * , operacija uklanjanja uzoraka primjenjuje se za svaki parametar položaja zauzvrat, a proširenje je rezultat popisa. Ako je parametar varijabla polja podcrtane s @ ili * , operacija uklanjanja uzoraka primjenjuje se za svaki član polja zauzvrat, a proširenje je rezultat popisa.

Riječ se proširuje kako bi proizvela uzorak kao u proširenju staza. Ako se uzorak podudara s krajnjim dijelom proširene vrijednosti parametra , rezultat ekspanzije je proširena vrijednost parametra s najkraćim uzorkom (`` % '' slučaj) ili najdužeg podudarnog uzorka (`` % % '' slučaj) izbrisan. Ako je parametar @ ili * , operacija uklanjanja uzoraka primjenjuje se za svaki parametar položaja zauzvrat, a proširenje je rezultat popisa. Ako je parametar varijabla polja podcrtane s @ ili * , operacija uklanjanja uzoraka primjenjuje se za svaki član polja zauzvrat, a proširenje je rezultat popisa.

Uzorak se proširuje kako bi stvorio uzorak kao u proširenju staze. Parametar se proširuje, a najduže podudaranje uzorka s njegovom vrijednošću zamjenjuje se nizom . U prvom obliku, zamjenjuje se samo prva utakmica. Drugi obrazac uzrokuje da se sve žetone uzorka zamijene nizom . Ako obrazac počinje s # , mora se podudarati na početku proširene vrijednosti parametra . Ako obrazac počinje s % , mora se podudarati na kraju proširene vrijednosti parametra . Ako je niz nulji, podudaranja uzorka se brišu i sljedeći obrazac može biti izostavljen. Ako je parametar @ ili * , zamjenska se operacija primjenjuje na svaki parametar pozicije zauzvrat, a proširenje je rezultat popisa. Ako je parametar varijabla polja podcrtane s @ ili * , zamjenska se operacija primjenjuje na svaki član polja zauzvrat, a proširenje je rezultatni popis.

Zamjena naredbe

Zamjena naredbe dopušta izlaz naredbe da zamijeni naziv naredbe. Postoje dva oblika:

$ ( naredba )

ili

` naredba`

Bash izvršava ekspanziju izvršavanjem naredbe i zamjenjuje zamjensku naredbu standardnim izlazom naredbe, s bilo kojim izbrisanim završetkom narednih linija. Ugrađene nove linije ne brišu se, ali se mogu ukloniti tijekom razdvajanja riječi. Zamjenska naredba $ (mačka datoteka ) može se zamijeniti ekvivalentnim ali bržim $ (< datoteka ).

Kada se upotrebljava stari oblik stražnjeg obrasca supstitucije, unatrag zadržava doslovno značenje, osim kada slijedi $ , ` ili \ . Prvi povratni kotač koji ne prethodi povratni udarac prekida zamjenu naredbe. Kada koristite oblik $ ( naredba ), svi znakovi između zagrada čine naredbu; nitko se ne tretira posebno.

Zamjene naredbi mogu biti ugniježđene. Za gnijezda prilikom korištenja obrasca s natpisom natrag, izbjegnite unutarnje udžbenike s povratnim crtama.

Ako se zamjena pojavljuje unutar dvostrukih navodnika, rezultati se ne izvode na širenje riječi i proširenje staza.

Aritmetička ekspanzija

Aritmetička ekspanzija omogućuje procjenu aritmetičke ekspresije i supstituciju rezultata. Format aritmetičke ekspanzije je:

$ (( izraz ))

Izraz se tretira kao da je unutar dvostrukih citata, ali dvostruka ponuda unutar zagrada se ne tretira posebno. Svi znakovi u izrazu prolaze kroz proširenje parametara, proširenje niza, zamjena naredbe i uklanjanje citata. Aritmetičke zamjene mogu biti ugniježđene.

Evaluacija se provodi prema pravilima navedenim u nastavku u ARITMETIČKOJ EVALUACIJI . Ako izraz nije valjan, bash ispisuje poruku koja ukazuje na neuspjeh i ne dolazi do zamjene.

Zamjena procesa

Zamjena procesa podržana je na sustavima koji podržavaju navedene cijevi ( FIFO ) ili metodu / dev / fd za imenovanje otvorenih datoteka. Potreban je oblik <( popis ) ili > ( popis ) . Popis procesa se izvodi svojim ulazom ili izlazom povezanim s FIFO ili nekom datotekom u / dev / fd . Naziv ove datoteke prolazi kao argument za trenutnu naredbu kao rezultat ekspanzije. Ako se koristi obrazac > ( popis ) , pisanje u datoteku će dati unos za popis . Ako se koristi obrazac <( list ) , datoteka koja se prosljeđuje kao argument treba pročitati kako bi se dobila izlazna lista .

Kada je dostupna, supstitucija procesa provodi se istodobno s parametrom i varijabilnim ekspanzijom, zamjenom naredbe i aritmetičkom ekspanzijom.

Razdvajanje riječi

Shema skenira rezultate ekspanzije parametara, zamjene naredbe i aritmetička ekspanzija koja se nisu pojavila unutar dvostrukih citata za cijepanje riječi .

Školjka tretira svaki lik IFS-a kao graničar i dijeli rezultate ostalih ekspanzija u riječi na te znakove. Ako IFS nije podešen, ili je njegova vrijednost točno , zadana postavka, onda svaki niz IFS znakova služi za određivanje riječi. Ako IFS ima vrijednost koja nije zadana, tada se slijed i razmak između razmaka i kartica razmaka u slici zanemaruje na početku i kraju riječi, ako je znak razmaka u vrijednosti IFS-a ( IFS- znak razmaka). Svaki znak u IFS-u koji nije IFS razmak, zajedno s bilo kojim susjednim IFS znakovima u smeću, određuje polje. Redoslijed IFS znakova u smeću također se tretira kao graničnik. Ako je vrijednost IFS- a niža, ne dolazi do razdvajanja riječi.

Eksplicitni nulti argumenti ( "" ili "" ) zadržani su. Nepotvrđeni implicitni null argumenti, koji proizlaze iz proširenja parametara koji nemaju vrijednosti, uklanjaju se. Ako se parametar bez vrijednosti proširuje unutar dvostrukih navoda, null argument rezultate i zadržava se.

Imajte na umu da ako se ne pojavi ekspanzija, ne provodi se cijepanje.

Proširenje naziva naziva

Nakon dijeljenja riječi, osim ako je postavljena -f postavka, bash skenira svaku riječ za znakove * ,? , i [ . Ako se pojavi jedan od tih znakova, riječ se smatra uzorkom i zamjenjuje se abecednim popisom naziva datoteka koji odgovaraju obrascu. Ako se ne pronađu odgovarajući nazivi datoteka, a opcija ljuske nullglob je onemogućena, riječ ostaje nepromijenjena. Ako je postavljena nullglob opcija, a nema pronađenih rezultata, riječ se uklanja. Ako je omogućena nocaseglob opcija ljuske, podudaranje se izvodi bez obzira na slučaj abecednih znakova. Kada se obrazac koristi za proširenje staze, znak ``. '' Na početku naziva ili neposredno nakon slame mora biti izričito podudaran, osim ako nije postavljena dotglob opcija ljuske. Prilikom podudaranja naziva staze, znak krila uvijek mora biti izričito podudaran. U drugim slučajevima, znak ``. '' Se ne tretira posebno. Pogledajte opis shopt u nastavku pod SHELL BUILTIN COMMANDS za opis opcija nocaseglob , nullglob i dotglob .

Varijabla ljuske GLOBIGNORE može se koristiti za ograničavanje skupova naziva datoteka koji odgovaraju obrascu . Ako je GLOBIGNORE postavljen, svaki naziv podudaranja datoteke koji odgovara jednom od obrasca u GLOBIGNORE uklanja se s popisa podudaranja. Nazivi datoteka ``. '' I `` .. '' uvijek se zanemaruju, čak i kada je GLOBIGNORE postavljen. Međutim, postavljanje GLOBIGNORE ima učinak omogućavanja opcije ljuske dotglob , pa će se svi ostali nazivi datoteka početi s ``. '' Podudarati. Da biste dobili staro ponašanje ignoriranja naziva datoteka počevši od ``. '' , Napravite ``. * '' Jedan od obrasca u GLOBIGNORE . Opcija dotglob je onemogućena kada je GLOBIGNORE unset.

Usklađivanje uzoraka

Bilo koji znak koji se pojavljuje u uzorku, osim posebnih znakova opisanih u nastavku, odgovara. Nul karakter se ne može pojaviti u uzorku. Moraju se navesti posebni znakovi uzoraka ako se doslovno podudaraju.

Posebni znakovi imaju sljedeće značenje:

*

Podudara se s bilo kojim nizom, uključujući i null niz.

?

Podudara se s bilo kojim pojedinačnim znakom.

[...]

Podudara se s bilo kojim od zatvorenih znakova. Par znakova razdvojenih crticom označava izraz raspona ; bilo koji znak koji se razlikuje između ta dva znaka, uključivši se pomoću trenutnog slijeda uspoređivanja i skupa znakova, uspoređuje se. Ako je prvi znak koji slijedi [ a ! ili ^ tada se svaki znak koji nije zatvoren odgovara. Redoslijed sortiranja znakova u izrazima raspona određen je trenutnim lokalnim vrijednostima i vrijednosti varijable ljuske LC_COLLATE , ako je postavljena. A - može se podudarati uključivanjem kao prvog ili zadnjeg znaka u skup. A ] može se podudarati uključivanjem kao prvog znaka u skup.

Unutar [ i ] , klase znakova mogu se odrediti pomoću sintakse [: class :] , gdje je klasa jedna od sljedećih klasa definiranih u POSIX.2 standardu:

alnum alfa ascii prazan cntrl digit grafikon niži ispis punct prostor gornja riječ xdigit
Klasa karaktera odgovara bilo kojem karakteru koji pripada toj klasi. Riječ klase znakova odgovara slovima, znamenkama i znaku _.

Unutar [ i ] , klasa ekvivalencije može se odrediti pomoću sintakse [= c =] , koja odgovara svim znakovima s istom masom raspodjele (kao što je definirano trenutačnim prostorom) kao znak c .

Unutar [ i ] , sintaksa [. simbol .] odgovara simbolu zbirnog simbola .

Ako je opcija shell extglob omogućena pomoću ugrađenog shopt-a , prepoznaju se nekoliko operatora podudaranja proširenih uzoraka. U sljedećem opisu, popis uzoraka je popis jednog ili više uzoraka odijeljenih s | , Kompozitni uzorci mogu se oblikovati pomoću jednog ili više sljedećih pod-uzoraka:

? ( popis uzoraka )

Podudara se s nultom ili jednom pojavom navedenih obrazaca

* ( popis uzoraka )

Podudara se s nultim ili više pojavljivanja zadanih obrazaca

+ ( popis uzoraka )

Podudara se s jednom ili više pojavljivanja navedenih obrazaca

@ ( popis uzoraka )

Podudara se točno s jednim od zadanih uzoraka

! ( popis uzoraka )

Odgovara ništa osim jednog od navedenih obrazaca

Uklanjanje kvota

Nakon prethodnih proširenja, uklanjaju se sve neotklonjene pojave znakova \ , ' i " koje nisu rezultat nekog od gore navedenih proširenja.

preusmjeravanje

Prije nego što se naredba izvodi, njegov unos i izlaz se mogu preusmjeriti pomoću posebnog zapisa interpretiranog od ljuske. Preusmjeravanje se također može koristiti za otvaranje i zatvaranje datoteka za trenutačnu okolinu izvršenja ljuske. Sljedeći operatori preusmjeravanja mogu prethoditi ili se pojaviti bilo gdje unutar jednostavne naredbe ili mogu slijediti naredbu . Preusmjeravanja se obrađuju redoslijedom kojim se pojavljuju, s lijeva na desno.

U sljedećim opcijama, ako je broj deskriptora datoteke izostavljen, a prvi znak operatora preusmjeravanja je < , preusmjeravanje se odnosi na standardni unos (deskriptor datoteka 0). Ako je prvi znak operatora preusmjeravanja > , preusmjeravanje se odnosi na standardni izlaz (opis datoteke 1).

Riječ nakon operatora preusmjeravanja u sljedećim opisu, ako nije drugačije navedeno, podvrgava se ekspanziji okretaja, ekspanzijom tilda, ekspanzijom parametara, zamjenom naredbe, aritmetičkom ekspanzijom, odstranjivanjem citata, proširenjem staza i raspodjelom riječi. Ako se proširuje na više od jedne riječi, bash izvješćuje o pogrešci.

Napominjemo da je redoslijed preusmjeravanja značajan. Na primjer, naredba

ls > dirlist 2 > & l

usmjerava i standardni izlaz i standardnu ​​pogrešku u datoteku dirlist , dok je naredba

ls 2 & gt ;

usmjerava samo standardni izlaz na datoteku dirlist , jer je standardna pogreška duplicirana kao standardni izlaz prije standardnog izlaza je preusmjeren na dirlist .

Bash obrađuje nekoliko datoteka naročito kada se koriste u preusmjeravanju, kao što je opisano u sljedećoj tablici:

/ dev / fd / fd

Ako je fd valjani cijeli broj, deskriptor datoteka fd je dupliciran.

/ dev / stdin

Datoteka opisnika 0 je duplicirana.

/ dev / stdout

Datoteka opisnika 1 je duplicirana.

/ dev / stderr

Datoteka opisnika 2 je duplicirana.

/ dev / tcp / host / port

Ako je domaćin valjani naziv hosta ili internetska adresa, a priključak je cijeli broj porta ili naziv usluge, bash pokušava otvoriti TCP vezu na odgovarajuću utičnicu.

/ dev / udp / host / port

Ako je domaćin valjani naziv hosta ili internetska adresa, a priključak je cijeli broj porta ili naziv usluge, bash pokušava otvoriti UDP vezu na odgovarajuću utičnicu.

Neuspjeh otvaranja ili stvaranja datoteke dovodi do prekida preusmjeravanja.

Preusmjeravanje unosa

Preusmjeravanje ulaza uzrokuje datoteku čije ime proizlazi iz proširenja riječi da se otvori za čitanje na deskriptoru n , ili standardni ulaz (deskriptor datoteka 0) ako n nije naveden.

Opći format za preusmjeravanje unosa je:

[ n ] < riječ

Preusmjeravanje izlaza

Preusmjeravanje izlaza uzrokuje datoteku čije ime proizlazi iz proširenja riječi da se otvori za pisanje na deskriptoru n , ili standardni izlaz (deskriptor datoteka 1) ako n nije naveden. Ako datoteka ne postoji, stvara se; ako postoji, skraćuje se nula veličina.

Opći format za preusmjeravanje izlaza je:

[ n ] > riječ

Ako je operater preusmjeravanja > , a opcija noclobbera za skup ugrađenog omogućena, preusmjeravanje neće uspjeti ako datoteka čije ime proizlazi iz proširenja riječi postoji i redovna je datoteka. Ako je operater preusmjeravanja > | , ili je operater preusmjeravanja > i opcija noclobbera za set ugrađenu naredbu nije omogućena, preusmjeravanje se pokušava, čak i ako postoji datoteka koja se zove riječ .

Dodavanje preusmjerenog izlaza

Preusmjeravanje izlaza na ovaj način uzrokuje datoteku čije ime proizlazi iz proširenja riječi koja se otvara za dodavanje na deskriptor n , ili standardni izlaz (opis datoteke 1) ako n nije naveden. Ako datoteka ne postoji, stvara se.

Opći format za dodavanje izlaza je:

[ n ] >> riječ

Preusmjeravanje standardnog izlaza i standardne pogreške

Bash omogućuje da se standardni izlaz (deskriptor datoteka 1) i standardna izlazna pogreška (deskriptor datoteka 2) preusmjeravaju u datoteku čije je ime širenje riječi s ovim konstruktom.

Postoje dva formata za preusmjeravanje standardnih i standardnih pogrešaka:

&> riječ

i

> i riječ

Od ova dva oblika poželjna je prva. Ovo je semantički ekvivalentno

> riječ 2 > & 1

Ovdje Dokumenti

Ova vrsta preusmjeravanja upućuje ljusku na čitanje ulaza iz trenutnog izvora sve dok se ne vidi crta koja sadrži samo riječ (bez praznog praznog elementa). Sve linije koje se čitaju do te točke služe kao standardni unos naredbe.

Oblik ovih dokumenata je:

<< [ - ] ovdje riječ - graničnik dokumenta

Nema riječi o proširenju parametra, zamjeni naredbi, aritmetičkoj ekspanziji ili proširenju staza. Ako se navode neki znakovi u riječi , graničnik je rezultat uklanjanja citata na riječi , a linije u ovom dokumentu nisu proširene. Ako je riječ neprimijenjena, sve linije ovdje dokumenta podložne su ekspanziji parametra, zamjeni naredbi i aritmetičkom širenju. U potonjem slučaju, niz znakova \ se zanemaruje, i \ mora se koristiti za navođenje znakova \ , $ i ` .

Ako je operater preusmjeravanja << - , onda svi vodeći znakovi kartica su uklonjeni iz ulaznih linija i linija koja sadrži graničnik . To omogućuje ovdje da se dokumenti unutar skriptnih skripti budu razrezali na prirodan način.

Ovdje su žice

Varijanta ovdje dokumenata, format je:

<<< riječ

Riječ se proširuje i dostavlja se naredbi na standardnom unosu.

Dupliciranje deskriptora datoteka

Operater preusmjeravanja

[ n ] <& riječ

se koristi za dupliciranje deskriptora ulaznih datoteka. Ako se riječ proširuje na jednu ili više znamenki, deskriptor datoteka označen s n je kopija tog deskriptora. Ako znamenke u riječi ne navode deskriptor datoteka otvorenog za unos, dolazi do pogreške preusmjeravanja. Ako se riječ procjenjuje na - , deskriptor datoteka n je zatvoren. Ako n nije naveden, koristi se standardni unos (deskriptor datoteka 0).

Operator

[ n ] > i riječ

koristi se slično duplikatu deskriptora izlaznih datoteka. Ako n nije naveden, koristi se standardni izlaz (deskriptor datoteka 1). Ako znamenke u riječi ne navode deskriptor datoteka otvoren za izlaz, dolazi do pogreške preusmjeravanja. Kao poseban slučaj, ako je n izostavljen, a riječ se ne proširuje na jednu ili više znamenki, standardni izlaz i standardna pogreška preusmjeravaju se na prethodno opisani način.

Premještanje deskriptora datoteka

Operater preusmjeravanja

[ n ] <& znamenka -

pomiče znamenku deskriptora datoteke u deskriptor n , ili standardni ulaz (deskriptor datoteka 0) ako n nije naveden. znamenka je zatvorena nakon što je duplicirana na n .

Slično tome, operator preusmjeravanja

[ n ] > i znamenka -

pomiče znamenku deskriptora datoteke u deskriptor n , ili standardni izlaz (deskriptor datoteka 1) ako n nije naveden.

Otvaranje deskriptora za čitanje i pisanje

Operater preusmjeravanja

[ n ] <> riječ

uzrokuje datoteku čije je ime širenje riječi koja se otvara za čitanje i pisanje na deskriptoru n , ili na deskriptoru 0 ako n nije naveden. Ako datoteka ne postoji, nastaje.

nadimci

Alias dopušta da se riječ zamijeni riječima kada se koristi kao prva riječ jednostavne naredbe. Školjka održava popis aliasa koji se mogu postaviti i poništiti pomoću naredbi alias i unalias (pogledajte SHELL BUILTIN COMMANDS u nastavku). Prva riječ svake naredbe, ako nije označena, provjerava ima li ga pseudonim. Ako je tako, ta se riječ zamjenjuje tekstom aliasa. Ime pseudonima i zamjenski tekst mogu sadržavati bilo koji valjani ulaz ljuske, uključujući gore navedene metakaraktere , s izuzetkom da ime pseudonima ne smije sadržavati = . Prva riječ zamjenskog teksta testirana je na pseudonimima, ali riječ koja je identična proširenju pseudonima nije proširena drugi put. To znači da može biti alias ls do ls -F , na primjer, a bash ne pokušava rekurzivno proširiti zamjenski tekst. Ako je zadnji znak alias vrijednosti prazan , zatim sljedeća naredba riječi koja slijedi alias također se provjerava za proširenje pseudonima.

Aliasovi su stvoreni i navedeni pomoću naredbe alias i uklonjeni pomoću naredbe unalias .

Ne postoji mehanizam za korištenje argumenata u zamjenskom tekstu. Ako su potrebni argumenti, treba koristiti funkciju ljuske (pogledajte FUNKCIJE u nastavku).

Aliase se ne proširuju kada je ljuska ne interaktivna, osim ako je opcija shell shell proširenja wp- a postavljena pomoću shopt (vidi opis shopt-a ispod SHELL BUILTIN COMMANDS u nastavku).

Pravila koja se tiču ​​definiranja i upotrebe podudaranja donekle su zbunjujuća. Bash uvijek čita najmanje jednu cjelovitu unos teksta prije izvršavanja nijedne naredbe na toj liniji. Alias ​​se proširuje kada se naredba pročita, a ne kada se izvršava. Stoga se definicija pseudonima koja se pojavljuje na istoj liniji kao druga naredba ne stupi na snagu dok se ne čita sljedeća linija unosa. Novi pseudonim ne utječe na naredbe nakon definicije pseudonima na toj liniji. Ovo ponašanje je također problem kada se izvršavaju funkcije. Aliasi se proširuju kada se definira funkcija, a ne kada je funkcija izvršena, jer je definicija funkcija sama po sebi kompleksna naredba. Kao posljedica, aliase definirane u jednoj funkciji nisu dostupne sve dok se ta funkcija ne izvrši. Da biste bili sigurni, uvijek postavite definicije aliasa na zasebnu liniju, a ne koristite pseudonim u komparativnim naredbama.

Gotovo za svaku svrhu, aliase su zamijenjene funkcijama ljuske.

FUNKCIJE

Funkcija ljuske, definirana kao gore opisana pod SHELL GRAMMAR , pohranjuje niz naredbi za kasnije izvršenje. Kada se naziv funkcije ljuske koristi kao jednostavan naziv naredbe, izvršava se popis naredbi pridruženih tom nazivu funkcije. Funkcije se izvode u kontekstu trenutne ljuske; nijedan novi proces nije stvoren kako bi ih protumačio (suprotno tome izvršavanjem ljuske skripte). Kada se izvršava funkcija, argumenti funkciji postaju položajni parametri tijekom izvršavanja. Posebni parametar # ažuriran je tako da odražava promjenu. Pozicijski parametar 0 je nepromijenjen. Varijabla FUNCNAME postavljena je na naziv funkcije dok funkcija funkcionira. Svi drugi aspekti okoline izvršenja ljuske identični su između funkcije i njegovog pozivatelja, s iznimkom da se DEBUG zamka (vidi opis zamke ugrađen u SHELL BUILTIN COMMANDS u nastavku) nije naslijeđen, osim ako funkciji nije dana atribut tragova ( pogledajte opis deklaracije ugrađenog u nastavku).

Varijable lokalne funkcije mogu se proglasiti lokalnom ugrađenom naredbom. Obično, varijable i njihove vrijednosti dijele se između funkcije i njegovog pozivatelja.

Ako se ugrađena naredba vrati u neku funkciju, funkcija se dovršava i izvršenje se nastavlja sljedećom naredbom nakon funkcijskog poziva. Kada funkcija završi, vrijednosti parametara položaja i posebnog parametra # vraćaju se na vrijednosti koje su imale prije izvršenja funkcije.

Nazivi funkcija i definicije mogu biti navedeni s opcijom -f za deklarirane ili tipske ugrađene naredbe. Opcija -F za deklariranje ili sortiranje navodi samo nazive funkcija. Funkcije se mogu izvesti tako da se podskupovi automatski definiraju pomoću opcije -f na izvoz ugrađen.

Funkcije mogu biti rekurzivne. Ne postoji ograničenje broja rekurzivnih poziva.

ARITMETSKA EVALUACIJA

Shema omogućuje da se aritmetički izrazi procjenjuju, pod određenim okolnostima (pogledajte pustiti ugrađenu naredbu i aritmetičku ekspanziju ). Evaluacija se vrši u cijelim brojevima fiksne širine bez provjere za preljev, iako podjela po 0 je zarobljena i označena kao pogreška. Operatori i njihova prednost i asocijativnost su isti kao u C jeziku. Sljedeći popis operatera grupiran je u razine operatorima s jednakim prioritetom. Razine su navedene redoslijedom smanjenja prednosti.

id ++ id -

varijabilno post-inkrement i post-decrement

ID id - id

varijabilno unaprijed povećanje i prethodno smanjenje

- +

unary minus i plus

! ~

logička i bitna negacija

**

eksponenciranje

* /%

množenje, podjela, ostatak

+ -

dodavanje, oduzimanje

<< >>

lijevi i desni pomak u boji

<=> = <>

usporedba

==! =

jednakosti i nejednakosti

&

bitno AND

^

bitno ekskluzivni OR

|

bitno OR

&&

logički AND

||

logički OR

expr ? expr : expr

uvjetna procjena

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

zadatak

expr1 , expr2

zarez

Shell varijable dopuštene su kao operandi; ekspanzija parametra se provodi prije procjene ekspresije. Unutar izraza, varijable ljuske mogu se također navoditi po imenu bez upotrebe sintakse ekspanzije parametra. Vrijednost varijable vrednuje se kao aritmetička ekspresija kada je navedena. Varijabla ljuske ne mora imati uključeni atribut cijeli broj koji se koristi u izrazu.

Konstante s vodećim 0 interpretirane su kao oktalni brojevi. Vodeći 0x ili 0X označava heksadecimalni. Inače, brojevi imaju oblik [ base # ] n, gdje je baza decimalni broj između 2 i 64 koji predstavlja aritmetičku bazu, a n je broj u toj bazi. Ako se baza # izostavlja, koristi se baza 10. Brojke veće od 9 predstavljaju mala slova, velika slova, @ i _, u tom redoslijedu. Ako je baza manja ili jednaka 36, ​​mala i velika slova mogu se međusobno koristiti za zastupanje brojeva između 10 i 35.

Operatori se vrednuju prema redoslijedu. Podnesci u zagradama se prvo procjenjuju i mogu nadjačati prethodno navedena pravila.

KONDICIONALNE IZRAŽE

Uvjetni izrazi koriste [[ compound command i test i [ builtin naredbe za testiranje atributa datoteka i izvršavanje niza i aritmetičkih usporedbi. Izrazi se formiraju iz sljedećih jednodijelnih ili binarnih primarnih. Ako je bilo koji argument datoteke na jednom od primarnih podataka u obliku / dev / fd / n , tada se označava opis datoteke n . Ako je argument za datoteku na jednom od primarnih znakova jedan od / dev / stdin , / dev / stdout ili / dev / stderr , označen je descriptor datoteka 0, 1 ili 2.

- datoteku

Istina je ako datoteka postoji.

-b datoteku

Istina je da datoteka postoji i da je blok posebna datoteka.

-c datoteku

Istina je da datoteka postoji i da je posebna datoteka za znak.

-d datoteku

Istina je ako datoteka postoji i je direktorij.

- datoteku

Istina je ako datoteka postoji.

-f datoteku

Istina je ako datoteka postoji i redovna je datoteka.

-g datoteku

Istina je ako datoteka postoji i postavljena je grupa-id.

-h datoteku

Istina je ako datoteka postoji i simbolična je veza.

-k datoteku

Istina je da datoteka postoji i njen je "sticky" bit postavljen.

-p datoteku

Istina je ako datoteka postoji i nazivana je cijev (FIFO).

-r datoteku

Istina je ako datoteka postoji i čitljiva.

-s datoteku

Istina je ako datoteka postoji i ima veličinu veću od nule.

-t fd

Istina je ako je opisnik datoteka fd otvoren i odnosi se na terminal.

-u datoteku

Istina je da datoteka postoji i postavljen je bit za set-user-id.

-w datoteku

Istina je ako datoteka postoji i može se pisati.

-x datoteku

Istina je ako datoteka postoji i izvršna je.

-O datoteku

Istina, ako datoteka postoji i vlasništvo je korisničkog ID-a.

-G datoteku

Istina, ako datoteka postoji i vlasništvo je djelotvornog ID-a grupe.

-L datoteku

Istina je ako datoteka postoji i simbolična je veza.

-S datoteku

Istina je da datoteka postoji i jest utičnica.

-N datoteku

Istina je ako datoteka postoji i izmijenjena je od zadnjeg čitanja.

file1 - nt file2

Istina je da je datoteka 1 novije (prema datumu izmjene) od datoteke2 , ili ako datoteka1 postoji i datoteka2 ne.

file1 - ot file2

Istina je da je datoteka1 starija od datoteke2 ili ako datoteka2 postoji i datoteka1 ne.

file1 -ef datoteka2

Istina je da se datoteka1 i datoteka2 odnose na isti uređaj i brojeve inoda.

-o optname

Istina, ako je opcija opcije shell opcija omogućena. Pogledajte popis opcija ispod opisa -o opcije na set ugrađen ispod.

-z niz

Istina je ako je duljina niza nula.

-n string

niz

Istina je da duljina niza nije nula.

string1 == string2

Istina, ako su žice jednake. = može se koristiti umjesto == za strogo poštivanje POSIX-a.

string1 ! = string2

Istina, ako žice nisu jednake.

string1 < string2

Istina je da string1 razvrstava prije stringa leksikografski u trenutnoj lokaciji.

string1 > string2

Istina je da se string1 razvrstava nakon string2 leksikografski u trenutnom prostoru.

arg1 OP arg2

OP je jedan od -eq , -ne , -lt , -le , -gt ili -ge . Ti aritmetički binarni operateri vraćaju se istinito ako je arg1 jednak, nije jednak, manji, manji ili jednak, veći ili veći od ili jednaka arg2 . Arg1 i arg2 mogu biti pozitivni ili negativni integri.

JEDNOSTAVNA NARUČENJA

Kada se izvede jednostavna naredba, ljuska izvodi sljedeće proširenja, zadatke i preusmjeravanja s lijeva na desno.

1. Riječi koje je parser označio kao varijabilne zadatke (one koji prethode nazivu naredbe) i preusmjeravanja spremaju se za kasniju obradu.

2. Riječi koje nisu varijabilne zadatke ili preusmjeravanja proširene su. Ako ostane bilo koja riječ nakon proširenja, prva se riječ smatra nazivom naredbe, a ostale riječi su argumenti.

3.Redirection se izvodi kao što je gore opisano pod REDIRECTION .

4. Tekst nakon što je = u svakoj dodjeli varijabli prolazi ekspanziju tilda, ekspanziju parametara, zamjenu naredbe, aritmetičku ekspanziju i uklanjanje citata prije dodjeljivanja varijable.

Ako ne dobije naziv naredbe, dodjeljivanje varijabli utječe na trenutnu okruženja oklopa. Inače, varijable dodaju u okruženje izvršene naredbe i ne utječu na trenutnu okruženja oklopa. Ako bilo koji od zadataka pokušava dodijeliti vrijednost promjenjivoj veličini, pojavljuje se pogreška, a naredba izlazi s statusom koji nije nula.

Ako ne dobije nijedan naredbeni redak, preusmjeravaju se, ali ne utječu na trenutnu okruženja ljuske. Pogreška preusmjeravanja uzrokuje naredbu da izađe s statusom koji nije nula.

Ako postoji naredba koja je ostala nakon ekspanzije, izvršenje nastavlja kako je dolje opisano. Inače, naredba izlazi. Ako je jedan od proširenja sadržavao zamjenu naredbi, izlazni status naredbe je izlazni status zadnje izvršene zamjene naredbe. Ako nema zamjenskih naredbi, naredba izlazi s statusom nula.

IZVRŠAVANJE RUKOVANJA

Nakon što je naredba podijeljena u riječi, ako se radi o jednostavnoj naredbi i neobaveznom popisu argumenata, poduzimaju se sljedeće radnje.

Ako naziv naredbe ne sadrži kose, shema pokušava pronaći. Ako postoji funkcija ljuske tim imenom, ta se funkcija poziva kao što je gore opisano u FUNCTIONS . Ako naziv ne odgovara nekoj funkciji, ljuska ga traži na popisu ugrađenih ljuski. Ako se pronađe utakmica, poziva se taj izgrađen.

Ako naziv nije funkcija ljuske niti ugrađen, a ne sadrži kose, bash pretražuje svaki element PATH za direktorij koji sadrži taj izvršni program taj naziv. Bash upotrebljava tablicu raspršivanja kako bi se sjetili svih putnih datoteka izvršnih datoteka (pogledajte hash pod SHELL BUILTIN COMMANDS u nastavku). Potpuna pretraživanja direktorija u PATH se izvodi samo ako naredba nije pronađena u hash tablici. Ako pretraživanje nije uspjelo, ljuska ispisuje poruku o pogrešci i vraća izlazni status 127.

Ako je pretraživanje uspješno ili ako naziv zapovjeda sadrži jednu ili više krajeva, shema izvršava navedeni program u zasebnom okruženju izvršenja. Argument 0 je postavljen na navedeno ime, a preostali argumenti naredbi postavljeni su na dane argumente, ako ih ima.

Ako ovo izvršenje ne uspije jer datoteka nije u izvršnom formatu, a datoteka nije direktorij, pretpostavlja se da je to shema skripte , datoteka koja sadrži naredbe ljuske. Podgrupa je spawned to izvršiti. Taj se podsustav ponovno inicijalizira, tako da je učinak kao da se nova ljuska poziva za rukovanje skripta, s izuzetkom da su djeteta zadržala mjesta zapovijedi koje je zapamtio roditelj (vidi tabu ispod SHELL BUILTIN COMMANDS ).

Ako je program datoteka koja počinje s #! , ostatak prvog retka određuje tumača za program. Shema izvodi određeni tumač na operativnim sustavima koji same ne upravljaju ovim izvršnim formatom. Argumenti tumaču sastoje se od jednog opcionalnog argumenta koji slijedi ime tumača na prvom retku programa, nakon čega slijedi naziv programa, nakon čega slijede naredbeni argumenti, ako ih ima.

OPERACIJSKO OKRUŽENJE UPRAVLJANJA

Shema ima izvršnu okolinu , koja se sastoji od sljedećeg:

* Otvori datoteke naslijeđene od ljuske na poziv, kao što je modificirano preusmjeravanja dostavljene izvršitelj builtin

* trenutni radni imenik kao što je postavljen s cd , pushd , ili popd , ili naslijedio ljusku na poziv

* Maska za izradu datoteke koja je postavljena umaskom ili naslijeđena iz roditelja ljuske

* trenutne zamke postavljene zamkom

* Parametri ljuske koji su postavljeni varijabilnim dodjeljivanjem ili skupom ili naslijeđenim iz roditelja ljuske u okolišu

* funkcije ljuske definirane tijekom izvršavanja ili naslijeđene iz roditelja ljuske u okolišu

* Mogućnosti omogućene na poziv (bilo po defaultu ili s naredbenim retkim argumenata) ili skup

* opcije koje omogućuje shopt

* alias definiranim pomoću aliasa

* različiti ID-ovi procesa, uključujući one pozadinskih poslova, vrijednost $$ i vrijednost $ PPID

Kada se izvršava jednostavna naredba koja nije ugrađena ili funkcija ljuske, ona se zove u odvojenom izvršnom okruženju koje se sastoji od sljedećeg. Ako nije drugačije navedeno, vrijednosti su naslijeđene iz ljuske.

* otvorene datoteke ljuske, kao i sve izmjene i dopune navedene preusmjeravanjem na naredbu

* trenutni radni imenik

* maskiranje načina stvaranja datoteke

* varijable ljuske označene za izvoz, zajedno s varijablama koje se izvoze za naredbu, prenesene u okoliš

* zamke uhvaćene od ljuske vraćaju se na vrijednosti naslijeđene od roditelja ljuske i zamke koje ignorira ljuska zanemaruju se

Naredba zazvana u ovom zasebnom okruženju ne može utjecati na okruženje izvršenja ljuske.

Zamjena naredbe i asinkroni naredbe se zazivaju u okruženju podgrupe koja je duplikat okruženja ljuske, osim što zamke uhvaćene od ljuske vraćaju se na vrijednosti koje je ljuska naslijedila od svog roditelja na poziv. Ugrađene naredbe koje se pozivaju kao dio cjevovoda izvode se iu okruženju podgrupe. Promjene u okruženju podgrupe ne mogu utjecati na okruženje izvršenja ljuske.

Ako slijedi naredba & i kontrola posla nije aktivna, zadani standardni ulaz za naredbu je prazna datoteka / dev / null . U suprotnom, zazivana naredba nasljeđuje deskriptore datoteka pozivne ljuske kako su modificirane preusmjeravanjem.