Sh - Linux Command - Unix naredba

NAME

bash - GNU Bourne-Again SHell

SYNOPSIS

bash [opcije] [datoteka]

OPIS

Bash je sh- kompatibilan prevodilac koji koristi komande pročitane sa standardnog unosa ili iz datoteke. Bash takođe uključuje korisne funkcije iz Korn i C shells ( ksh i csh ).

Bash je namijenjen za usklađivanje implementacije specifikacije IEEE POSIX Shell i Tools (IEEE Working Group 1003.2).

OPCIJE

Pored opcija jednostrukih znakova koji su dokumentovani u opisu podešene ugrađene komande, bash tumači sledeće opcije kada se poziva:

-c string

Ako je prisutna opcija -c , komande se čitaju iz stringa . Ako postoje argumenti nakon stringa , oni se dodeljuju pozicijskim parametrima, počevši od $ 0 .

-i

Ako je opcija -i prisutna, shell je interaktivan .

-l

Uradite bash čin kao da se poziva kao šablon za prijavljivanje (pogledajte INVOCATION ispod).

-r

Ako je opcija -r prisutna, shell postaje ograničen (pogledajte RESTRICTED SHELL ispod).

-s

Ako je opcija -s prisutna, ili ako nakon obrade opcije ne ostaju nikakvi argumenti, komande se čita sa standardnog unosa. Ova opcija dozvoljava postavljanje parametara pozicije prilikom pozivanja na interaktivnu školjku.

-D

Lista svih dvostrukih citata prepisanih od strane $ se štampa na standardnom opciji. Ovo su stringovi koji podležu prevođenju jezika kada trenutni jezik nije C ili POSIX . Ovo podrazumeva opciju -n ; nijedna komanda neće biti izvršena.

[- +] O [ shopt_option ]

shopt_option je jedna od šolskih opcija prihvaćenih od strane prodavnice (pogledajte SHELL BUILTIN COMMANDS ispod). Ako je shopt_option prisutan, -O postavlja vrijednost te opcije; + O ga unosi. Ako shopt_option nije isporučen, imena i vrijednosti opcija šolje prihvaćene od strane shopt-a se štampaju na standardnom izlazu. Ako je opcija za pozivanje + O , izlaz se prikazuje u formatu koji se može ponovo koristiti kao ulaz.

A - signalizira kraj opcija i onemogućava dalje opciono obrađivanje. Svi argumenti posle - tretiraju se kao imena datoteka i argumenti. Argument - jednak je - .

Bash takođe tumači niz više karakternih opcija. Ove opcije se moraju pojaviti u komandnoj liniji pre nego što se prepoznaju opcije sa jednim znakom.

-dump-po-strings

Ekvivalentno -D , ali je izlaz u GNU gettext po (prenosivi objekt) format datoteke.

-dump-strings

Ekvivalentno -D .

- pomoć

Prikažite poruku o korišćenju na standardnom izlazu i izlazite uspešno.

--init-fajl datoteka

--rcfile fajl

Izvršite naredbe iz datoteke umesto standardne datoteke lične inicijalizacije ~ / .bashrc ako je shell interaktivna (pogledajte INVOCATION ispod).

--Ulogovati se

Ekvivalentno -l .

- ujedinjenje

Ne koristite biblioteku čitanja GNU-a za čitanje komandnih linija kada je ljuska interaktivna.

--noprofile

Ne čitajte sistemsku datoteku za pokretanje / etc / profile ili bilo koju od ličnih inicijalnih datoteka ~ / .bash_profile , ~ / .bash_login ili ~ / .profile . Podrazumevano, bash čita ove datoteke kada se poziva kao šifra za prijavljivanje (pogledajte INVOCATION ispod).

--Norc

Nemojte čitati i izvršiti ličnu datoteku za inicijalizaciju ~ / .bashrc ako je shell interaktivan. Ova opcija je podrazumevano uključena ako se shell koristi kao sh .

--posix

Promenite ponašanje bash gdje se podrazumevana operacija razlikuje od standarda POSIX 1003.2 u skladu sa standardnim ( režim posix ).

- ograničeno

Šutiranje postaje ograničeno (pogledajte RESTRICTED SHELL ispod).

-rpm-zahteva

Izradite listu datoteka koje su potrebne za pokretanje skripti. Ovo podrazumeva '-n' i podleže istim ograničenjima kao i provjeru provere greške prilikom kompajliranja; Backticks, [] testovi i evali nisu razdvojeni tako da se neke zavisnosti mogu propustiti. --verbose Ekvivalentno -v .

- verzija

Prikažite informacije o verziji za ovu instancu bash na standardnom izlazu i izlazite uspešno.

ARGUMENTI

Ako ostaju argumenti nakon obrade opcije, a niti -c niti -s opcija nije isporučena, prvi argument se smatra nazivom datoteke koja sadrži komande shell-a. Ako se bash koristi na ovaj način, $ 0 je postavljeno na ime datoteke, a položajni parametri su postavljeni na preostale argumente. Bash čita i izvršava komande iz ove datoteke, a zatim izlazi. Bašov status izlaska je status izlaza poslednje komande izvršene u skriptu. Ako se ne izvršavaju nikakve komande, status izlaza je 0. Pokušaj je prvo napraviti da se datoteka otvori u trenutnom direktoriju i, ako se ne pronađe datoteka, onda shell pretražuje direktorije u PATH-u za skriptu.

INVOCATION

Šablon za prijavu je onaj čiji je prvi karakter nula argumenta - , ili je on započeo sa --login opcijom.

Interaktivna ljuska je jedna koja se pokreće bez argumenata bez opcije i bez opcije -c čiji standardni ulaz i izlaz su oboje spojeni na terminale (kao što je utvrđeno u isatty (3)), ili one započete sa opcijom -i . PS1 je podešen i $ - uključuje i ako je bash interaktivan, dozvoljavajući skriptu ili početnu datoteku da testira ovo stanje.

Sledeći paragrafi opisuju kako bash izvršava svoje startup datoteke. Ako bilo koja od datoteka postoji, ali ne može se pročitati, bash prijavi grešku. Tilde su proširene u imena datoteka kako je opisano ispod Tilde Expansion u odeljku EXPANSION .

Kada se bash poziva kao interaktivna šifra za prijavljivanje ili kao neinteraktivna ljuska sa opcijom --login , najpre čita i izvršava komande iz datoteke / etc / profile , ako ta datoteka postoji. Nakon što pročita tu datoteku, traži ~ / .bash_profile , ~ / .bash_login i ~ / .profile , u tom redosledu i čita i izvršava komande od prvog koji postoji i može se čitati. Opcija -noprofile se može koristiti kada je shell počela da inhibira ovo ponašanje.

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

Kada se pokrene interaktivna ljuska koja nije shell login, bash čita i izvršava komande iz ~ / .bashrc , ako ta datoteka postoji. Ovo se može inhibirati upotrebom opcije --norc . Opcija --rcfile fajl će primiti bash da pročita i izvršava naredbe iz datoteke umesto ~ / .bashrc .

Kada se bash započe neinteraktivno, radi pokretanja skripte, na primjer, traži varijablu BASH_ENV u okruženju, proširuje svoju vrijednost ako se tamo pojavljuje i koristi proširenu vrijednost kao ime datoteke za čitanje i izvršenje . Bash se ponaša kao da je izvršena sledeća komanda:

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

ali vrednost promenljive PATH ne koristi se za pretraživanje imena datoteke.

Ako je bash pozvan sa im sh , pokušava imitiraju ponašanje za početak istorijskih verzija sh što je moguće bliže, dok je u skladu sa POSIX standardom. Kada se poziva kao interaktivna šifra za prijavu ili neinteraktivna ljuska sa opcijom --login , najpre pokušava da pročita i izvršava komande iz / etc / profile i ~ / .profile , u tom redosledu. Opcija -noprofile se može koristiti za sprečavanje ovog ponašanja. Kad se poziva kao interaktivna ljuska s imenom sh , bash traži varijablu ENV , širi svoju vrijednost ako je definirana, a proširenu vrijednost koristi kao ime datoteke za čitanje i izvršenje. Pošto se lupa poziva kao sh , ne pokušava da pročita i izvršava naredbe iz bilo koje druge datoteke za pokretanje, opcija --rcfile nema efekta. Neinteraktivna lupa koja se poziva sa imenom sh ne pokušava da pročita bilo koju drugu datoteku za pokretanje. Kada se pozove kao sh , bash ulazi u režim posix nakon čitanja datoteka za pokretanje.

Kada se bash započinje u režimu pozicije , kao i sa opcijom komandne linije --posix , sledi POSIX standard za pokretne datoteke. U ovom režimu, interaktivne školjke proširuju promenljivu ENV i komande se čitaju i izvršavaju iz datoteke čije je ime proširena vrijednost. Nema drugih datoteka za pokretanje.

Bash pokušava da utvrdi kada ga pokreće udaljeni server , obično rshd . Ako bash odredi da ga pokreće rshd , čita i izvršava komande iz ~ / .bashrc , ako ta datoteka postoji i može se čitati. To neće učiniti ako se pozove kao š . Opcija --norc se može koristiti za inhibiranje ovog ponašanja, a opcija -rcfile se može koristiti da bi se sila druga datoteka za čitanje, ali rshd uglavnom ne poziva ljusku sa tim opcijama ili ne dozvoljava da se one specificiraju.

Ako je ljuska započeta sa efektivnim korisničkim (grupnim) id-om koji nije jednak ID-u stvarnog korisnika (grupe), a opcija -p nije isporučena, nema se pokretanja datoteka, funkcije shell-a nisu nasleđene iz okruženja, SHELLOPTS varijabla, ako se ona pojavi u okruženju, zanemaruje se, a efektivni korisnički ID je postavljen na stvarni korisnički ID. Ako je opcija -p data na pozivu, ponašanje pri pokretanju je isto, ali efektivni korisnički ID se ne resetuje.

DEFINICIJE

Sledeće definicije se koriste u celom ostatku ovog dokumenta.

prazno

Prostor ili tabulator.

riječ

Niz znakova koji se smatra pojedinačnom jedinicom od strane ljuske. Poznat i kao token .

ime

Riječ koja se sastoji samo od alfanumeričkih znakova i podčrtava, a počinje sa abecednim znakom ili podlakticom. Takođe se naziva i identifikator .

metacharacter

Karakter koji, kada nije nekotiran, odvaja riječi. Jedno od sledećih:

| &; () <> prostor tab

kontrolni operator

Token koji vrši kontrolnu funkciju. To je jedan od slijedećih simbola:

|| & &&; ;; () |

REZERVISANE REČI

Rezervisane reči su reči koje imaju posebno značenje za ljusku. Sledeće reči su prepoznate kao rezervisane kada se ne kotiraju i neka prva reč jednostavne komande (vidi SHELL GRAMMAR ispod) ili treću reč slučaja ili za naredbu:

! slučaj uradi elif drugo esac fi za funkciju ako je u odjeljku dok ne dođete dok {} vrijeme [[]]

SHELL GRAMMAR

Jednostavne komande

Jednostavna komanda je sekvenca opcionih dodeljivanja opsega praćena praznim- razdvojenim riječima i redirekcijama, a završava ih kontrolni operater . Prva reč označava komandu koja se izvršava i koja se prenosi kao argument nula. Preostale reči se prenose kao argumenti za pozvani komandu.

Povratna vrijednost jednostavne naredbe je njegov izlazni status ili 128 + n ako je komanda prekinuta signalom n .

Cjevovodi

Plinovod je niz jedne ili više komandi razdvojenih znakom . Format za gasovod je:

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

Standardni izlaz komande se preko cevi povezuje na standardni ulaz komande2 . Ova veza se vrši pre bilo kakvih preusmeravanja koje je odredila komanda (pogledajte REDIRECTION ispod).

Ako rezervisana reč ! prethodi cevovodu, status izlaznog izlaza za taj gasovod je logična NOT statusa iz zadnje naredbe. U suprotnom, status plinovoda je status izlaza poslednje komande. Šuklu čeka sve komande u cjevovodu da se prekinu pre vraćanja vrijednosti.

Ako je vremenski rezervisana reč prethodi cevovodu, protok, kao i korisničko i sistemsko vrijeme koje se troši po njegovom izvršenju, prijavljuje se kada se cijev prekine. Opcija -p menja output format na onaj koji je odredio POSIX. TIMEFORMAT varijabla se može postaviti na niz stringova formata koji određuje kako treba prikazati informacije o vremenu; pogledajte opis TIMEFORMAT pod Shell varijablama ispod.

Svaka naredba u cjevovodu se izvršava kao poseban proces (tj. U podsklopu).

Liste

Lista je niz jedne ili više cevovoda odvojenih od jednog od operatora ; , & , && , ili || , i opciono prekinuta sa jednim od ; , & ili .

Od ovih operatora liste, && i || imaju jednaku prednost, a zatim slede ; i &, koji imaju jednaka prednost.

Niz jedne ili više novih linija može se pojaviti na listi umjesto tačke i tačke za razdvajanje komandi.

Ako komandu prekine operator kontrole & , shell izvršava komandu u pozadini u podsklopu. Šoku ne čeka da komanda završi, a status povrata je 0. Komande odvojene od a ; se izvršavaju sekvencijalno; ljuska čeka svaku komandu da se okonča. Povratni status je status izlaza poslednje izvršene komande.

Kontrolni operatori && i || označavaju AND liste i OR liste, respektivno. Lista AND ima oblik

command1 && command2

command2 se izvršava ako i samo ako komanda1 vraća status izlaza nule.

Lista OR je u obliku

command1 || command2

command2 se izvršava ako i samo ako komanda1 vraća status nule koji nije nula. Povratni status liste AND i OR je status izlaza poslednje komande izvršene na listi.

Komandne komande

Kombinovana komanda je jedna od sledećih:

( lista )

lista se izvršava u podzapu. Varijabilne zadatke i ugrađene komande koje utiču na okruženje školjke ne ostanu na snazi ​​nakon što komanda završi. Povratni status je status izlaza liste .

{ list ; }

lista se jednostavno izvršava u trenutnom shell okruženju. lista mora biti prekinuta sa novom linijom ili tačkom i podpičicama. Ovo je poznato kao grupa komanda . Povratni status je status izlaza liste . Imajte na umu da su za razliku od meta-karaktera ( i ) , { i } rezervisane reči i moraju se desiti tamo gde je rezervisana reč dozvoljena za prepoznavanje. Pošto ne uzrokuju pauzu riječi, moraju biti odvojene sa liste sličnim prostorom.

(( izraz ))

Izraz se procenjuje prema pravilima opisanim dole pod ARITMETIČkom EVALUACIJOM . Ako je vrijednost izraza nula, povratni status je 0; inače je status povrata 1. To je upravo ekvivalentno pustanju " izraza ".

[[ izraz ]]

Vratite status od 0 ili 1 u zavisnosti od procjene izraza uslovnog izraza . Izrazi se sastoje od primarnih parametara opisanih dole pod POJEDINSKIM PRIKAZOM . Razdvajanje riječi i proširenje putanje se ne vrše na riječima između [[ i ]] ; proširenje tilde, parametar i varijabilna ekspanzija, aritmetička ekspanzija, zamjena naredbi, zamjena procesa i uklanjanje citata.

Kada se koriste operatori == i ! = , Niz sa desne strane operatora se smatra uzorkom i odgovara prema pravilima opisanim dole pod Uporedivanjem uzoraka . Povratna vrijednost je 0 ako se string poklapa ili ne odgovara obrazcu, odnosno 1 u suprotnom. Bilo koji deo šablona može biti citiran da bi ga primijenio kao niz.

Izrazi se mogu kombinovati pomoću sljedećih operatora, koji su navedeni u redosledu prioriteta:

( izraz )

Vraća vrijednost izraza . Ovo se može koristiti za prevazilaženje normalne prednosti operatora.

! izraz

Istina ako je izraz neispravan.

expression1 && expression2

Istina je ako su i izraz1 i izraz2 tačni.

expression1 || izraz2 Istinski ako je izraz1 ili izraz2 tačan.

The && i || operatori ne procenjuju izraz2 ako je vrijednost izraza 1 dovoljna da odredi povratnu vrijednost čitavog uslovnog izraza.

za ime [ u reči ]; uradi listu ; završeno

Spisak reči koje sledi je proširen, generišući listu stavki. Ime promenljive je postavljeno na svaki element ove liste, a lista se izvršava svaki put. Ako je riječ izostavljena, naredba za izvršava listu jednom za svaki postavljeni parametar postavke (pogledajte PARAMETRI ispod). Povratni status je status izlaza poslednje naredbe koja se izvršava. Ako se proširenje stavki koje sledi u rezultatima prazne liste, ne izvršavaju se nikakve komande, a status povratka je 0.

za (( expr1 ; expr2 ; expr3 )); uradi listu ; završeno

Prvo, aritmetički izraz expr1 se procenjuje prema pravilima opisanim dole pod ARITMETIČkom EVALUACIJOM . Aritmetički izraz expr2 se zatim procenjuje više puta dok se ne proceni na nulu. Svaki put, expr2 procjenjuje na vrednost koja nije nula, lista se izvršava i aritmetički izraz expr3 se ocjenjuje. Ako je neki izraz ispušten, on se ponaša kao da ocjenjuje na 1. Povratna vrijednost je status izlazne zadnje naredbe u listi koja se izvršava ili je netačna ako je neki od izraza nevažeći.

izaberite ime [ u reči ]; uradi listu ; završeno

Spisak reči koje sledi je proširen, generišući listu stavki. Skup proširenih reči je odštampan na standardnoj grešci, od kojih svaki prethodi broj. Ako je riječ izostavljena, parametri za poziciju se odštampaju (pogledajte PARAMETRI ispod). Zatim se prikaže PS3 poziv i čita se sa standardnog ulaza. Ako se linija sastoji od broja koji odgovara jednoj od prikazanih reči, tada je vrednost imena postavljena na tu reč. Ako je linija prazna, reči i poziv se ponovo prikazuju. Ako je EOF pročitan, komanda se završava. Svaka druga vrijednost pročita uzrokuje naziv na nulti. Čitanje linije se čuva u varijanti REPLY . Lista se izvršava nakon svake selekcije sve dok se ne izvrši naredba za pauzu . Status izlaska izlaza je status izlaza poslednje komande izvršene na listi , ili nula ako nijedna komanda nije izvršena.

primerna riječ u [[(] pattern [ | pattern ]

Komanda slučaja najpre širi riječ i pokušava da se podudara sa svakom šablonom zauzvrat, koristeći iste pravila podudaranja kao i proširenje putanje (pogledajte Razširenje putanje ispod). Kada se pronađe meč, izvršava se odgovarajuća lista . Posle prvog meča, ne pokušaju se nikakve naknadne utakmice. Status izlaska je nula ako se ne poklapa sa uzorkom. Inače, to je status izlaza poslednje komande izvršene na listi .

ako je lista ; zatim popis; [ elif lista ; zatim popis ; ] ... [ drugu listu ; ] fi

Ako je lista izvršena. Ako je status izlaska nula, onda se izvrši tada lista . U suprotnom, svaka elif lista se izvršava zauzvrat, a ako je njen izlazni status nula, odgovarajuća tada lista se izvrši i komanda završi. Inače, druga lista se izvršava, ako je prisutna. Status izlaska je status izlaza poslednje izvršene komande, ili nula ako nijedan uslov nije testiran.

dok liste ; uradi listu ; završeno

do liste ; uradi listu ; završeno

Komanda dok je neprekidno izvršava listu dokumenata sve dok poslednja komanda u listi vrati status izlazne vrednosti nule. Sve dok komanda nije identična naredbi dok , osim što je test negiran; lista izvršavanja se izvršava sve dok zadnja komanda u listi vraća stanje nultog izlaza. Stanje izlaznog vremena i dok se komande predstavlja status izlaza zadnje izvršene naredbe liste , ili nula ako nijedna nije izvršena.

[ funkcija ] ime () { lista ; }

Ovo definiše funkciju pod imenom . Telo funkcije je lista komandi između {i}. Ova lista se izvršava kad god je ime naznačeno kao ime jednostavne komande. Status izlaza funkcije je status izlaza poslednje komande izvršene u tijelu. (Pogledajte FUNKCIJE ispod.)

KOMENTARI

U ne-interaktivnoj školi ili interaktivnoj školi u kojoj je omogućena opcija interactive_comments do ugrađenog shopa (pogledajte ispod SHELL BUILTIN COMMANDS ), reč koja počinje sa # uzrokuje da se ova reč i svi ostali znakovi na toj liniji ignorišu. Interaktivna ljuska bez omogućene opcije interactive_comments ne dopušta komentare. Interactive_comments opcija je podrazumevano u interaktivnim granama.

QUOTING

Citiranje se koristi da ukloni posebno značenje određenih znakova ili reči u ljusku. Citiranje se može koristiti za onemogućavanje posebnog tretmana specijalnih znakova, kako bi se sprečilo da se rezervisane riječi prepoznaju kao takve i da spreče širenje parametara.

Svaki od metačkih znakova navedenih gore pod DEFINITIONS ima posebno značenje za ljusku i mora se citirati ako se predstavlja.

Kada se koriste objekti za proširenje istorije istorije, karakter istorije istorije , obično ! , mora se citirati kako bi se sprečilo širenje istorije.

Postoje tri mehanizma za citiranje: znak za bekstvo , pojedinačni citati i dvostruki navodnici.

Nepotpisana pošiljaka ( \ ) je znak za izbjegavanje . On čuva doslovnu vrednost sledećeg karaktera koji sledi, izuzev . Ako se pojavi par \ , a backslash se ne citira, \ se tretira kao nastavak linije (tj. Uklanja se iz ulaznog toka i efikasno se zanemaruje).

Priloženi znakovi u pojedinačnim citatima čuvaju doslovnu vrednost svakog karaktera unutar citata. Pojedinačni citat se možda ne pojavljuje između pojedinačnih citata, čak i kada prethodi pošiljaka.

Priloženi znakovi u dvostrukim navodnicima čuvaju dobru vrijednost svih znakova unutar citata, sa izuzetkom $ , ` , i \ . Likovi $ i ` zadržavaju svoje posebno značenje u dvostrukim navodnicima. Backslash zadržava svoje posebno značenje samo ako sledi jedan od sledećih znakova: $ , ` , " , \ ili . Dvostruki citat može biti citiran u okviru dvostrukih citata preteći ga sa backslash-u.

Posebni parametri * i @ imaju posebno značenje kada su u dvostrukim navodnicima (vidi PARAMETRI ispod).

Riječi oblika ' string ' se tretiraju posebno. Reč proširuje se u string , a znakovi sa izbegnutim crtežima su zamenjeni kako je navedeno u ANSI C standardu. Backslash escape sekvence, ako postoje, se dekodiraju na sledeći način:

\ a

upozorenje (zvono)

\ b

backspace

\ e

znak bekstva

\ f

feed feed

\ n

nova linija

\ r

povrat kočije

\ t

horizontalni tab

\ v

vertikalni tabulator

\\

backslash

\ '

pojedinačni citat

\ nnn

osmobitni znak čija je vrednost oktalna vrijednost nnn (jedna do tri cifre)

\ x HH

osmobitni znak čija je vrijednost heksadecimalna vrijednost HH (jedna ili dvije heks cifre)

\ c x

kontrolni znak

Prošireni rezultat je pojedinačno citiran, kao da znak za dolar nije bio prisutan.

Dvostruki niz koji prethodi znaku dolara ( $ ) će dovesti do toga da se string prevede prema trenutnom lokalnom jeziku. Ako je trenutni lokalitet C ili POSIX , znak za dolar se zanemaruje. Ako je niz preveden i zamenjen, zamena je dvostruka.

PARAMETRI

Parametar je entitet koji čuva vrijednosti. To može biti ime , broj ili jedan od specijalnih znakova navedenih ispod u odeljku Special Parameters . Za svrhe školjke, promenljiva je parametar označen nazivom . Varijabla ima vrijednost i nulte ili više atributa . Atributi se dodeljuju pomoću komande declare builtin (pogledajte dole navedenu u SHELL BUILTIN COMMANDS ).

Parametar se postavlja ako je dodeljena vrednost. Nula string je važeća vrijednost. Kada je postavljena varijabla, može biti isključena samo pomoću unset-a ugrađene komande (pogledajte SHELL BUILTIN COMMANDS ispod).

Varijable se može dodijeliti izjavom o obrascu

ime = [ vrijednost ]

Ako vrijednost nije data, promjenici se dodjeljuje null string. Sve vrijednosti podležu ekspanziji tilde, parametru i varijabilni ekspanziji, zamjeni naredbi, aritmetičkom ekspanziji i uklanjanju citata (pogledajte EXPANSION ispod). Ako varijabla ima svoj skupni atribut atributa, onda vrijednost podleže aritmetičkom ekspanziji čak i ako se ekspanzija $ ((...)) ne koristi (vidjeti Aritmetički proširenje ispod). Razdvajanje riječi se ne vrši, izuzev "$ @" kao što je objašnjeno u daljem tekstu pod Posebnim parametrima . Proširenje putanje nije izvršeno. Izjave o dodeljivanju mogu se pojaviti i kao argumenti deklaracije , stavke , izvoza , readonly-a i lokalnih ugrađenih komandi.

Pozicijski parametri

Pozicijski parametar je parametar označen jednim ili više cifara, osim jedne jedne cifre 0. Pozicijski parametri se dodeljuju iz argumenata ljuske kada se pozivaju i mogu se ponovo rasporediti pomoću postavljene ugrađene komande. Pozicijski parametri se ne smeju dodeljivati ​​sa izjavama dodjele. Pozicijski parametri se privremeno zamjenjuju kada se izvrši šolja funkcija (pogledajte FUNKCIJE ispod).

Kada se parametar pozicije koji se sastoji od više od jedne cifre proširuje, mora biti zatvoren u grudima (vidi EXPANSION ispod).

Posebni parametri

Šarka posebno tretira nekoliko parametara. Ovi parametri mogu se referencirati samo; Dodjela njima nije dozvoljena.

*

Proširuje se na pozicijske parametre, počevši od jednog. Kada se ekspanzija odvija unutar dvostrukih navodnika, ona se širi na jednu reč sa vrijednošću svakog parametra odvojenim prvim karakterom IFS posebne varijabile. To znači da je " $ * " ekvivalentan " $ 1 c $ 2 c ... ", gdje je c prvi karakter vrijednosti IFS varijable. Ako IFS nije podešen, parametri su razdvojeni razmacima. Ako je IFS nula, parametri su spojeni bez interveniranja separatora.

@

Proširuje se na pozicijske parametre, počevši od jednog. Kada se ekspanzija javlja u dvostrukim navodnicima, svaki parametar se širi na posebnu reč. To znači da je " $ @ " ekvivalentan " $ 1 " " $ 2 " ... Kada nema pozicijskih parametara, " $ @ " i $ @ se šire na ništa (tj. Uklanjaju se).

#

Proširuje se na broj pozicijskih parametara u decimalnom broju.

?

Proširuje se u status najnovije izvedenog plinovoda prednje strane.

-

Proširuje se na trenutne zastave opcija kako je navedeno na pozivu, postavljena ugrađena komanda ili ona koja je postavila sam shell (kao što je opcija -i ).

$

Proširuje se u ID procesa okvira. U () podgrupi se širi na ID procesa trenutne ljuske, a ne podgrupe.

!

Proširuje se u ID procesa zadnje izvršene pozadine (asinhroni) naredbe.

0

Proširuje se u naziv shell ili skripti. Ovo je postavljeno na inicijalizaciju ljuske. Ako se bash pozove sa datotekom komandi, $ 0 je postavljeno na ime te datoteke. Ako je bash započet sa opcijom -c , onda je $ 0 postavljeno na prvi argument nakon što string bude izvršen, ako je prisutan. U suprotnom, postavljeno je na ime datoteke koje se koristi za pozivanje bash-a , kao što je data nula argumenta.

_

Prilikom startovanja školjke, postavite na apsolutno ime datoteke skripte ili skripte koja se izvršava kako se prenosi u listi argumenata. Posle toga, proširuje se na poslednji argument prethodne naredbe. Takođe postavite na pun naziv datoteke svake izvršene komande i stavljene u okruženje izvojeno u tu komandu. Kada proveravate poštu, ovaj parametar sadrži ime poštanske datoteke koja se trenutno proverava.

Shell promenljive

Sljedeće varijable postavlja ljuska:

BASH

Proširuje do punog imena datoteke koji se koristi za pozivanje ove instance bash-a .

BASH_VERSINFO

Čitav niz promenljivih čiji čiji članovi sadrže informacije o verziji za ovu instancu bash-a . Vrednosti dodeljene članovima polja su sledeće:

BASH_VERSINFO [ 0]

Glavni broj verzije ( izdanje ).

BASH_VERSINFO [ 1]

Mali broj verzije ( verzija ).

BASH_VERSINFO [ 2]

Nivo patcha.

BASH_VERSINFO [ 3]

Izgrađena verzija.

BASH_VERSINFO [ 4]

Status izdanja (npr. Beta1 ).

BASH_VERSINFO [ 5]

Vrijednost MACHTYPE-a .

BASH_VERSION

Proširuje se u string koji opisuje verziju ove instance bash-a .

COMP_CWORD

COMP_LINE

Trenutna komandna linija. Ova varijabla je dostupna samo u funkcijama školjke i eksternim komandama koje se pozivaju pomoću programabilnih objekata za završetak (pogledajte Programmable Completion ispod).

COMP_POINT

COMP_WORDS

Varijabla nizova (pogledajte nizove ispod) koji se sastoje od pojedinačnih riječi u trenutnoj komandnoj liniji. Ova varijabla je dostupna samo u funkcijama školjke koje se pozivaju pomoću programabilnih objekata za završetak (pogledajte Programmable Completion ispod).

DIRSTACK

Niz varijabli (pogledajte nizovi ispod) koji sadrže trenutni sadržaj stack direktorija. Direktori se pojavljuju u stacku po redosledu koji prikazuju dirs builtin . Dodjeljivanje članova ove varijabilne nizove može se koristiti za modifikovanje direktorija već u stacku, ali pushd i popd ugrađeni moraju biti korišteni za dodavanje i uklanjanje direktorija. Dodela na ovu varijablu neće promijeniti trenutni direktorij. Ako je DIRSTACK isključen, gubi se posebna svojstva, čak i ako se naknadno resetuje.

EUID

Proširuje se na efektivnu korisničku identifikaciju trenutnog korisnika, inicijalizovanu prilikom pokretanja školjke. Ova varijabla je readonly.

FUNCNAME

Ime bilo koje funkcije koja se trenutno izvršava. Ova varijabla postoji samo kada se izvršava šolja funkcija. Zadaci FUNCNAME- a nemaju efekta i vraćaju status greške. Ako je FUNCNAME neispravan, gubi se njegova posebna svojstva, čak i ako se naknadno resetuje.

GRUPE

Varijabla nizova koja sadrži listu grupa čiji je trenutni korisnik član. Zadaci GROUPS- a nemaju efekta i vraćaju status greške. Ako GROUPS nije postavljen, gubi se posebna svojstva, čak i ako se naknadno resetuje.

HISTCMD

Broj istorije ili indeks u listi istorije trenutne komande. Ako je HISTCMD neisključen, gubi se njegova posebna svojstva, čak i ako se naknadno resetuje.

HOSTNAME

Automatski postavite na ime trenutnog hosta.

HOSTTYPE

Automatski je postavljen na niz koji jedinstveno opisuje vrstu mašine na kojoj se bash izvodi. Podrazumevano je zavisno od sistema.

LINENO

Svaki put kada se koristi ovaj parametar, shell zamenjuje decimalni broj koji predstavlja trenutni sekvencijalni broj linije (počevši od 1) unutar skripte ili funkcije. Kada nije u skriptu ili funkciji, zagarantovana vrednost nije garantovana. Ako LINENO nije postavljen, gubi se njegova posebna svojstva, čak i ako se naknadno resetuje.

MACHTYPE

Automatski je postavljen na niz koji u potpunosti opisuje tip sistema na kojem bash izvodi, u standardnom formatu GNU cpu-company-system . Podrazumevano je zavisno od sistema.

OLDPWD

Prethodni radni direktorij koji je postavio komanda cd .

OPTARG

Vrednost poslednjeg argumenta opcije koju je unela naredba getopts builtin (pogledajte SHELL BUILTIN COMMANDS ispod).

OPTIND

Indeks sledećeg argumenta koji treba obraditi pomoću getopts builtin naredbe (pogledajte SHELL BUILTIN COMMANDS ispod).

OSTYPE

Automatski je postavljen na niz koji opisuje operativni sistem na kojem bash izvodi. Podrazumevano je zavisno od sistema.

PIPESTATUS

Niz varijabli (pogledajte nizove ispod) koji sadrže listu vrijednosti izlaznog statusa iz procesa u najnovije izvršenom protokolu (koji može sadržavati samo jednu komandu).

PPID

Identifikacioni proces roditelja ljuske. Ova varijabla je readonly.

PWD

Sadašnji radni direktorij postavljen komandom cd .

RANDOM

Svaki put kada se koristi ovaj parametar generira se nasumičan cijeli broj od 0 do 32767. Niz slučajnih brojeva može se inicijalizirati dodjeljivanjem vrijednosti RANDOM-u . Ako je RANDOM neisključen, gubi se njegova posebna svojstva, čak i ako je naknadno resetovan.

REPLY

Podesite liniju unosa koja pročita komanda čita, kada se ne isporučuju nikakvi argumenti.

SECONDS

Svaki put kada se koristi ovaj parametar, broj sekundi otkako se vraća lupak. Ako je vrijednost dodijeljena SECONDS-u , vrijednost koja se vraća nakon sljedećih referenci je broj sekundi od zadatka plus dodijeljena vrijednost. Ako SECONDS nije postavljen, gubi se njegova posebna svojstva, čak i ako se naknadno resetuje.

SHELLOPTS

Lista odvojenih listova opcija omogućenih školjki. Svaka reč na listi je validan argument za -o opciju za podešenu ugrađenu komandu (pogledajte SHELL BUILTIN COMMANDS ispod). Opcije koje se pojavljuju u SHELLOPTS-u su one o kojima se prijavljuje set -o . Ako je ova varijabla u okruženju kad započne bash , svaka lupa opcija na listi će biti omogućena pre čitaoca datoteka za pokretanje. Ova varijabla je samo za čitanje.

SHLVL

Povećava se po jedan svaki put kada se pokrene instanca bash- a.

UID

Proširuje se na korisnički ID trenutnog korisnika, inicijalizovanog pri pokretanju shell-a. Ova varijabla je readonly.

Sljedeće varijable koristi shell. U nekim slučajevima, bash dodeljuje podrazumevanu vrednost promenljivoj; ovi slučajevi su navedeni u nastavku.

BASH_ENV

Ako je ovaj parametar postavljen kada bash izvršava shell skriptu, njegova vrijednost se tumači kao ime datoteke koje sadrži komande za inicijalizaciju shell-a, kao u ~ / .bashrc . Vrednost BASH_ENV podleže širenju parametara, zameni naredbi i aritmetičkom ekspanziji prije nego što se tumači kao ime datoteke. PATH se ne koristi za pretraživanje rezultirajuće ime datoteke.

CDPATH

Put za pretragu za komandu cd . Ovo je lista direktorija odvojenih od strane kolona u kojoj shell izgleda za odredišne ​​direktorijume specificirane od strane komande cd . Vrednost uzorka je ".: ~: / Usr".

COLUMNS

Koristi se iz komande select builtin za određivanje širine terminala pri štampanju liste selekcije. Automatski se postavi po prijemu SIGWINCH-a.

KOMPONENTE

Varijabla nizova iz koje bash čita moguće zaključke generirane pomoću funkcije shell-a koja se poziva na programabilni objekat završetka (pogledajte Programmable Completion ispod).

FCEDIT

Podrazumevani editor za naredbu fc builtin.

FIGNORE

Lista sufiksa odvojenih od strane kolona koje se ignorišu prilikom izvršavanja imena datoteke (pogledajte READLINE ispod). Filename čiji sufiks odgovara nekoj od unosa u FIGNORE-u je isključen sa liste odgovarajućih imena datoteka. Vrednost uzorka je ".o: ~".

GLOBIGNORE

Lista liste odvojenih od strane kolona koja definiše skup imena datoteka koje treba ignorisati proširenjem putanje. Ako se ime datoteke podudaraju sa šemom proširenja putanje takođe odgovara jednom od šablona u GLOBIGNORE-u , uklanja se sa liste utakmica.

HISTCONTROL

Ako je postavljeno na vrednost ignoresvora , linije koje počinju sa znakom prostora nisu unete u listu istorije. Ako je postavljeno na vrednost zanemarivanja , linije koje odgovaraju zadnjoj liniji istorije nisu unete. Vrednost ignorebota kombinuje dve opcije. Ako je neisključeno ili ako je postavljeno na bilo koju drugu vrijednost od gore navedenih, sve linije koje pročita parser se čuvaju na listi istorije, a podložne su vrijednosti HISTIGNORE . Funkciju ove varijable zamjenjuje HISTIGNORE . Druga i naredne linije komande sa više linija nisu testirane i dodaju se u istoriju bez obzira na vrednost HISTCONTROL-a .

HISTFILE

Ime datoteke u koju je sačuvana istorija naredbe (pogledajte ISTORIJAT ispod). Podrazumevana vrednost je ~ / .bash_history . Ako se ne uspostavi, istorija naredbe se ne čuva kada interaktivna školjka izađe.

HISTFILESIZE

Maksimalan broj linija sadržanih u istorijskom fajlu. Kada je ovoj varijabli dodijeljena vrijednost, datoteka historije je skraćena, ako je potrebno, da ne sadrži više od tog broja redova. Podrazumevana vrednost je 500. Datoteka istorije takođe je skraćena na ovu veličinu nakon što je piše kada interaktivni shell izlazi.

HISTIGNORE

Lista liste odvojenih od kolona koje se koriste za određivanje komandnih linija treba sačuvati na listi istorije. Svaki obrazac je usidren na početku linije i mora odgovarati kompletnoj liniji (ne implicitno dodato ' * '). Svaki obrazac se testira na liniji nakon što se primjenjuju čekovi koje je odredio HISTCONTROL . Pored normalnih znakova koji odgovaraju znakovima šarže, ` & 'odgovara prethodnoj liniji istorije. ` & 'se može ukloniti pomoću pošiljaka sa kosom; oslobađajuće trake uklonjene pre pokušaja utakmice. Druga i naredne linije komande sa višestrukim linijama nisu testirane i dodaju se u istoriju bez obzira na vrednost HISTIGNORE-a .

HISTSIZE

Broj komandi koje treba zapamtiti u istoriji naredbe (pogledajte ISTORIJAT ispod). Podrazumevana vrednost je 500.

DOM

Osnovni direktorijum trenutnog korisnika; podrazumevani argument za naredbu cd builtin. Vrijednost ove varijable se također koristi pri izvršenju ekspanzije tilde.

HOSTFILE

Sadrži ime datoteke u istom formatu kao i / etc / hosts koje treba čitati kada shell treba da dovrši ime hosta. Spisak mogućih dovršavanja imena hostova može se promeniti dok se shell radi; sledeći put kada se pokuša završetak imena hosta nakon promene vrijednosti, bash dodaje sadržaj nove datoteke na postojeću listu. Ako je HOSTFILE podešen, ali nema vrijednost, bash pokušava čitati / etc / hostove da bi dobili listu mogućih dopunjavanja imena hostova. Kada HOSTFILE nije postavljen, lista domaćina se briše.

IFS

Interni separator polja koji se koristi za razdvajanje riječi nakon ekspanzije i razdvajanje linija na riječi sa čitanjem izgrađene komande. Podrazumevana vrednost je `` ''.

IGNOREEOF

Kontroliše delovanje interaktivne ljuske na prijemu EOF karaktera kao jedini ulaz. Ako je postavljeno, vrijednost je broj uzastopnih EOF znakova koji se moraju otkucati kao prvi znakovi na ulaznoj liniji pre nego što bash izađe. Ako varijabla postoji, ali nema brojčanu vrijednost ili nema vrijednost, podrazumevana vrijednost je 10. Ako ne postoji, EOF označava kraj unosa za shell.

INPUTRC

Ime datoteke za readline startup datoteku, nadmašujući podrazumevanu vrednost ~ / .inputrc (pogledaj READLINE ispod).

LANG

Koristi se za određivanje kategorije locale za bilo koju kategoriju koja nije posebno izabrana sa promenljivom koja počinje sa LC_ .

LC_ALL

Ova varijabla premašuje vrijednost LANG-a i bilo koje druge LC_ varijabla koja određuje kategoriju lokala.

LC_COLLATE

Ova varijabla određuje redosled upoređivanja koji se koristi pri sortiranju rezultata proširenja putanje i određuje ponašanje izraza opsega, klasa ekvivalencije i srodne grupe za sakupljanje unutar širenja putanje i uzorkovanja uzoraka.

LC_CTYPE

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

LC_MESSAGES

Ova varijabla određuje locale koji se koristi za prevođenje dvostrukih citata sa kojima prethodi $ .

LC_NUMERIC

Ova varijabla određuje kategoriju lokala koja se koristi za formatiranje broja.

LINIJE

Koristi se iz komande select builtin za određivanje dužine kolone za liste selekcije. Automatski se postavi po prijemu SIGWINCH-a.

MAIL

Ako je ovaj parametar podešen na ime datoteke i nije postavljena promenljiva MAILPATH , bash obaveštava korisnika o dolasku pošte u navedenu datoteku.

MAILCHECK

Određuje koliko često (u sekundama) baš provjerava poštu. Podrazumevano je 60 sekundi. Kada je vrijeme provjeriti poštu, shell to radi pre nego što prikaže primarni poziv. Ako je ova varijabla neisključena ili je postavljena na vrijednost koja nije broj veći ili jednak nuli, shell onemogućava provjeru pošte.

MAILPATH

Lista imena fajlova koja je odvojena od strane kolona treba proveriti za poštu. Poruka koja se štampa kada poštu stigne u određenu datoteku može se odrediti tako što se ime datoteke razdvaja sa porukom `? '. Kada se koristi u tekstu poruke, $ _ se širi na ime trenutne poštanske datoteke. Primjer:

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

Bash isporučuje podrazumevanu vrednost za ovu varijablu, ali lokacija korisničkih datoteka za poštu koju koristi koristi zavisi od sistema (npr., / Var / mail / $ USER ).

OPTERR

Ako je postavljeno na vrednost 1, bash prikazuje poruke o grešci koje generiše naredba getopts builtin (pogledajte SHELL BUILTIN COMMANDS ispod). OPTERR se inicijalizuje na 1 svaki put kada se shell koristi ili se izvrši shell skripta.

PUT

Put za pretragu komandi. To je lista direktorija u kome granata traži komande (pogledajte COMMAND EXECUTION ispod). Podrazumevana staza je zavisna od sistema, 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 je ova varijabla u okruženju kada započne bash , shell otvara režim posix pre nego što pročita zagonske datoteke, kao da je isporučena opcija pozicije pozicije. Ako je postavljeno dok je shell uključen, bash omogućava režim posix , kao da je izvršena komanda set -o posix .

PROMPT_COMMAND

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

PS1

Vrednost ovog parametra je proširena (pogledajte PROMPTING ispod) i koristi se kao primarni pozivni niz. Podrazumevana vrednost je `` \ s- \ v \ $ ''.

PS2

Vrednost ovog parametra je proširena kao kod PS1 i koristi se kao sekundarni pozivni niz. Podrazumevana vrednost je `` > ''.

PS3

Vrednost ovog parametra se koristi kao poziv za komandu za odabir (pogledajte SHELL GRAMMAR iznad).

PS4

Vrednost ovog parametra je proširena kao kod PS1 i vrednost se štampa pre nego što se svaki komandni bash prikazuje tokom traga za izvršavanje. Prvi karakter PS4 se ponavlja više puta, po potrebi, kako bi ukazao na višestruke nivoe indirectiona. Podrazumevana vrednost je `` + ''.

TIMEFORMAT

Vrednost ovog parametra se koristi kao niz formata koji određuje kako bi trebali biti prikazani podaci o vremenu za cevovode koji su prefiksirani sa vremenom rezervisane riječi. Karakter % uvodi sekvencu za bekstvo koja se proširuje na vremensku vrednost ili druge informacije. Escape sekvence i njihova značenja su sljedeći; ogrlice označavaju opcione delove.

%%

Dobar % .

% [ p ] [l] R

Prošlo vreme u sekundama.

% [ p ] [l] U

Broj CPU sekundi potrošenih u korisničkom režimu.

% [ p ] [l] S

Broj CPU sekundi provedenih u sistemskom režimu.

% P

Procenat CPU-a, izračunat kao (% U +% S) /% R.

Opciono p je cifra koja precizira preciznost , broj frakcionih cifara nakon decimalne tačke. Vrednost od 0 ne dovodi do izlivanja decimalne tačke ili frakcije. Najviše tri mesta nakon decimalne tačke mogu se navesti; vrijednosti p veće od 3 promjenjene su na 3. Ako p nije specificiran, vrijednost 3 se koristi.

Opcionalni l specificira duži format, uključujući i minute, formu MM m SS . FF s. Vrednost p određuje da li je frakcija uključena ili ne.

Ako ova varijabla nije postavljena, bash deluje kao da ima vrijednost $ \ nreal \ t% 3lR \ nuser \ t% 3lU \ nsys% 3lS ' . Ako je vrednost nula, ne prikazuju se informacije o vremenu. Dodata nova linija se dodaje kada se prikaže string za formatiranje.

TMOUT

Ako je postavljeno na vrednost veću od nule, TMOUT se tretira kao podrazumevani vremenski razmak za čitanje . Izbor komande se prekida ako ulaz ne stigne nakon TMOUT sekundi kada ulaz dolazi sa terminala. U interaktivnoj školi, vrednost se tumači kao broj sekundi čekanja na unos nakon izdavanja primarnog uputstva. Baš se završava nakon čekanja na taj broj sekundi ako ulaz ne stigne.

auto_resume

Ova varijabla kontroliše kako shell interakciju s korisnikom i kontrolom posla. Ako je ova varijabla postavljena, pojedinačne riječi jednostavne komande bez redirekcija se tretiraju kao kandidati za nastavak postojećeg prekinutog posla. Ne postoji dvosmislenost; ako postoji više od jednog posla koji počinje sa ukucanim nizom, izabran je posao koji je najskoriji pristup. Ime zaustavljenog posla u ovom kontekstu je komandna linija koja se koristi za pokretanje. Ako je postavljeno na preciznu vrijednost, isporučena string mora tačno odgovarati nazivu zaustavljenog posla; ako je podrazumevano podrazumevanom , isporučeno string treba da odgovara podstrani naziva zaustavljenog posla. Vrednost podstrana daje funkcionalnost analognu%% identifikator posla (pogledajte JOB CONTROL u nastavku). Ako je postavljeno na bilo koju drugu vrijednost, isporučeni niz mora biti prefiks za ime zaustavljenog posla; ovo obezbeđuje funkcionalnost analognu % identifikatoru posla.

histchars

Dva ili tri znaka koji kontrolišu širenje istorije i tokenizaciju (pogledajte dole HISTORY EXPANSION ). Prvi karakter je znak širenja istorije , karakter koji signalizira početak ekspanzije istorije, obično ` ! '. Drugi karakter je brz zamenski karakter, koji se koristi kao skraćenica za ponovno pokretanje prethodne unete naredbe, zamjenjuje jedan niz za drugi u naredbi. Podrazumevana vrednost je ` ^ '. Opcioni treći znak je znak koji pokazuje da je ostatak linije komentar kada se pronađe kao prvi karakter riječi, obično ` # '. Karakter za komentare istorije dovodi do preklapanja zamene historije za preostale reči na liniji. Nije obavezno prouzrokovati razdjelnik shell-a da tretira ostatak linije kao komentar.

Nizovi

Bash nudi varijable sa jednodimenzionalnim nizom. Svaka varijabla se može koristiti kao niz; deklaracija ugrađena eksplicitno deklariše niz. Ne postoji maksimalna granica veličine niza, niti bilo koji uslov da se članovi indeksiraju ili dodjeljuju uzastopno. Nizovi se indeksiraju pomoću celih brojeva i baziraju se na nuli.

Niz se kreira automatski ako je svaka varijabla dodeljena za korištenje sintakse ime [ subscript ] = vrijednost . Inkpis se tretira kao aritmetički izraz koji mora da proceni broj veći ili jednak nuli. Da eksplicitno deklarišete niz, koristite deklaraciju -a ime (pogledajte SHELL BUILTIN COMMANDS ispod). declare -a ime [ subscript ] je takođe prihvaćeno; inscript je ignorisan. Atributi mogu biti specificirani za promenljivu array pomoću deklaracija i readonly builtins. Svaki atribut odnosi se na sve članove niza.

Nizovi se dodjeljuju za korištenje spojenih zadataka ime formulara = ( vrijednost 1 ... vrijednost n ) , gdje je svaka vrijednost oblika [ subscript ] = string . Samo string je potreban. Ako su isporučeni opcionalni zagradi i indeksni indeks, taj indeks je dodeljen; inače indeks zadatog elementa je poslednji indeks dodijeljen od strane izjave plus jedan. Indeksiranje počinje na nuli. Ovu sintaksu prihvata i deklaracija ugrađena. Elementi pojedinačnog polja mogu biti dodeljeni za korištenje imena [ indexcript ] = sintaksa vrijednosti uvedena gore.

Unset ugrađeni se koristi za uništavanje nizova. unset name [ subscript ] uništava element array na index index. unset name , gde je ime niz ili unset ime [ subscript ], gdje je indeksni znak * ili @ , uklanja cijeli niz.

Izjavu, lokalno i readonly ugrađeni svako prihvata opciju -a da odredi niz. Čitač ugrađen prihvata opciju -a da dodeli listu reči pročitanih s standardnog unosa u niz. Postavite i deklarišite ugrađene vrednosti za niz vrednosti na način koji ih dozvoljava ponovo koristiti kao zadatke.

EKSPANZIJA

Proširenje se izvršava na komandnoj liniji nakon što je podeljena na riječi. Izvršeno je sedam vrsta ekspanzije: ekspanzija brace, ekspanzija tilde , parametar i varijabilna ekspanzija , zamjena komandi , aritmetička ekspanzija , razdvajanje riječi i proširenje putanje .

Redosled ekspanzije je: ekspanzija brace, ekspanzija tilde, parametar, varijabilna i aritmetička ekspanzija i zamjena komandi (izvedena levo-desno), razdvajanje riječi i proširenje putanje.

Na sistemima koji ga mogu podržati, dostupna je dodatna proširenja: zamjena procesa .

Proširenje braće

Širenje Brace je mehanizam pomoću kog se mogu generirati proizvoljne žice. Ovaj mehanizam je sličan proširenju putanje , ali generisane datoteke ne moraju da postoje. Patterns koji se proširuju proširuju se u obliku opcionalne preambule , praćene nizom odvojenih odrezaka između parova, a nakon toga je dodatni postScript . Preambula je prefiksirana za svaku niznu vezu u sklopcima, a postscript se zatim dodaju svakom rezultujućem nizu, širi se levo na desno.

Proširenja Brace-a mogu biti ugnežene. Rezultati svakog proširenog niza nisu sortirani; sa leva na desno je sačuvan. Na primjer, { d, c, b } e se širi u 'ade ace abe'.

Širenje Brace se vrši pre bilo kojih drugih proširenja, a svi znakovi posebni za druge ekspanzije se čuvaju u rezultatu. To je striktno tekstualno. Bash ne primjenjuje nikakvo sintaktičko tumačenje kontekstu širenja ili teksta između nosača.

Ovaj koncept se obično koristi kao skraćenica kada je zajednički prefiks stringa koji se generiše duži nego u prethodnom primeru:

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

ili

chown root /usr/{ucb/{ex,edit},lib/{ex?.**howhow_ex}}

Širenje Brace uvodi blagu nekompatibilnost sa istorijskim verzijama sh . sh ne tretira otvarače ili zatvarače posebno kada se pojavljuju kao deo reči i čuvaju ih na izlazu. Bash uklanja blokove iz reči kao posledicu ekspanzije oklopa. Na primjer, riječ koja je uneta u sh kao fajl {1,2} pojavljuje se identično na izlazu. Ista reč izlazi kao file1 file2 nakon proširenja za bash . Ako je poželjna striktna kompatibilnost sa sh , započnite bash sa opcijom + B ili onemogućite proširenje vezice pomoću opcije + B do postavljene komande (pogledajte SHELL BUILTIN COMMANDS ispod).

Tilde Expansion

Ako se riječ započinje nekim znakom znakova tilde (` ~ '), svi znakovi koji prethodi prvom nebeleženoj kosmici (ili svi znakovi, ako ne postoji nijedan koeficijent čekanja) smatraju se tilde-prefiksom . Ako se ne navode nijedan od znakova u tilde-prefiksu, znakovi u tilde-prefiksu nakon tilde tretiraju se kao moguće ime za prijavu . Ako je ovo ime za prijavu null string, tilda se zamenjuje vrijednošću parametra shell HOME . Ako HOME nije postavljen, umesto toga zamjenjuje se kućni direktorij koji izvršava ljusku. Inače, tilde-prefiks se zamenjuje sa početnim direktorijumom koji je povezan sa navedenim korisničkim imenom.

Ako je tilde-prefiks `~ + ', vrednost promenljive shell-a PWD zamenjuje tilde-prefiks. Ako je tilde-prefiks `~ - ', vrijednost varijable shell-a OLDPWD , ako je postavljena, zamjenjuje se. Ako znakovi koji prate tilde u tilde-prefiksu sastoje se od broja N , opciono prefiksovanim sa `+ 'ili` -', tilde-prefiks se zamjenjuje odgovarajućim elementom iz stack direktorijuma, jer bi se prikazao ugrađenim dirverima, koji se pozivaju na tilde-prefiks kao argument. Ako su znakovi koji prate tilde u tilde prefiksu sastoji se od broja bez vodećih `+ 'ili` -', `+ '.

Ako je ime za prijavu nevažeće, ili propadanje tilde ne uspije, riječ je nepromijenjena.

Svaka odredba varijabli se proverava za nepodijeljene tilde-prefikse odmah nakon : ili = . U ovim slučajevima se vrši i širenje tilde. Shodno tome, može se koristiti imena datoteka sa tildes u zadacima za PATH , MAILPATH i CDPATH , a shell dodeljuje proširenu vrijednost.

Širenje parametara

Znak ` $ 'uvodi proširenje parametara, zamenu naredbe ili aritmetičko proširenje. Ime parametra ili simbol koji treba proširiti može biti zatvoren u zaštitne obujmice, koji su neobavezni, ali služe za zaštitu varijable koja se širi od znakova koji se odmah prate, a koji se mogu tumačiti kao dio imena.

Kada se koriste brusne trake, odgovarajuća završna prsa nije prva " } " izbačena sa pošiljaocima ili unutar citiranog niza, a ne unutar ugrađene aritmetičke ekspanzije, zamene komandi ili proširenja paramtera.

Vrednost parametra je zamenjena. Nosači su potrebni kada je parametar parametar pozicije sa više od jedne cifre, ili kada parametar prati znak koji se ne može tumačiti kao dio njegovog imena.

U svakom od dole navedenih slučajeva riječ je podložna ekspanziji tilde, proširenju parametara, zamjeni komandi i aritmetičkom ekspanziji. Kada ne izvršava ekspanziju podrazumeva, bash testira za parametar koji je neispravan ili nultan; izostavljanje debelog creva rezultira testom samo za parametar koji se ne postavlja.

Koristite podrazumevane vrednosti . Ako je parametar neisključen ili nultan, proširenje reči je zamenjeno. U suprotnom, vrednost parametra je zamenjena.

Dodeli podrazumevane vrijednosti . Ako je parametar neisključen ili nultan, proširenje reči dodeljuje se parametru . Vrednost parametra se zatim zamenjuje. Na ovaj način se ne mogu dodeliti parametri pozicije i specijalni parametri.

Prikazuje grešku ako je Null ili Unset . Ako je parametar nula ili nije postavljena, proširenje reči (ili poruka u tom slučaju ako riječ nije prisutno) piše se na standardnu ​​grešku i shell, ako nije interaktivan, napušta. U suprotnom, vrednost parametra je zamenjena.

Koristite alternativnu vrednost . Ako je parametar null ili neispravan, ništa nije zamenjeno, inače je zamena reči zamenjena.

Proširuje se na imena varijabli čija imena počinju sa prefiksa , odvojena prvim karakterom IFS posebne varijabile.

Duljina karaktera vrijednosti parametra je zamijenjena. Ako je parametar * ili @ , zamijenjena vrijednost je broj pozicija parametara. Ako je parametar ime niza indeksiran pomoću * ili @ , zamijenjena vrijednost je broj elemenata u nizu.

Reč je proširen tako da proizvede obrazac baš kao iu proširenju putanje. Ako obrazac odgovara početku vrijednosti parametra , onda je rezultat proširenja proširena vrijednost parametra sa najkraćim šablonom za podudaranje (slučaj `` # '') ili najduži obrazac podudaranja (`` ## ' 'slučaj') obrisan. Ako je parametar @ ili * , operacija uklanjanja uzoraka se primenjuje na svaki pozicijski parametar zauzvrat, a proširenje je rezultirajuća lista. Ako je parametar promenljiva matrice upisana sa @ ili * , operacija uklanjanja uzoraka se primjenjuje na svakog člana arrakta, a ekspanzija je rezultirajuća lista.

Reč je proširen tako da proizvede obrazac baš kao iu proširenju putanje. Ako se obrazac podudara sa prolaznim dijelom proširene vrijednosti parametra , onda je rezultat proširenja proširena vrijednost parametra sa najkraćim uzorkom podudaranja (slučaj `%% ') ili najduži obrazac podudaranja (` ` % % '' slučaj je obrisan. Ako je parametar @ ili * , operacija uklanjanja uzoraka se primenjuje na svaki pozicijski parametar zauzvrat, a proširenje je rezultirajuća lista. Ako je parametar promenljiva matrice upisana sa @ ili * , operacija uklanjanja uzoraka se primjenjuje na svakog člana arrakta, a ekspanzija je rezultirajuća lista.

Šablon je proširen tako da proizvede šablon kao i kod proširenja putanje. Parametar je proširen, a najduži uzorak uzorka u odnosu na njegovu vrijednost zamjenjuje se nizom . U prvom obliku zamjenjuje se samo prvi meč. Drugi oblik uzrokuje da se sve utakmice uzorka zamene nizom . Ako obrazac počinje sa # , mora se podudarati na početku proširene vrednosti parametra . Ako obrazac počinje sa % , mora se podudarati na kraju proširene vrednosti parametra . Ako je string nula, podudaranja uzorka se brišu i mogu se izostaviti sledeći obrazac . Ako je parametar @ ili * , operacija supstitucije se primenjuje na svaki pozicijski parametar, a ekspanzija je rezultujuća lista. Ako je parametar niza promenljive koja je indeksirana sa @ ili * , operacija supstitucije se primenjuje na svakog člana arrakta, a ekspanzija je rezultujuća lista.

Zamjena naredbe

Zamjena komandi dozvoljava izlaz komande da zamijeni ime komande. Postoje dva oblika:

$ ( naredba )

ili

` command`

Bash izvršava proširenje izvršavajući naredbu i zamenjujući zamjenu naredbe s standardnim izlazom komande, sa bilo kojim zaokruženim novim linijama izbrisanim. Ugrađeni novi redovi se ne brišu, ali se mogu ukloniti tokom razdvajanja riječi. Zamjena komande $ ( datoteka cat ) može se zamijeniti ekvivalentnom, ali bržom $ (< datotekom ).

Kada se koristi oblik zamene koji se koristi u staroj stilu, backslash zadržava svoje doslovno značenje, osim kada sledi $ , ` , ili \ . Prvi povratni broj koji prethodi neuspješnoj obradi završava zamjenu naredbe. Kada koristite formular $ ( naredbe ), svi znakovi između zagrada čine komandu; niko se ne tretira posebno.

Zamjene naredbe mogu biti ugnežene. Da se gnezdi prilikom korišćenja formulara koji se vraća u pozadinu, izbegavajte unutrašnje povratne kutije sa backslashes.

Ako se supstitucija pojavljuje u dvostrukim navodnicima, razdvajanje riječi i proširenje putanje se ne izvršavaju na rezultatima.

Aritmetička ekspanzija

Aritmetička ekspanzija omogućava procenu aritmetičkog izraza i supstituciju rezultata. Format aritmetičke ekspanzije je:

$ (( izraz ))

Izraz se tretira kao da je u dvostrukim navodnicima, ali dvostruki citat u zagradama se ne tretira posebno. Svi tokeni u izrazu prolaze kroz proširenje parametara, ekspanziju nizova, zamenu naredbi i uklanjanje citata. Aritmetičke supstitucije mogu biti ugnežene.

Evaluacija se vrši prema pravilima navedenim u nastavku ARITMETIČKA EVALUACIJA . Ako je izraz nevažeći, bash odštampa poruku koja ukazuje na grešku i ne vrši se zamena.

Zamjena procesa

Zamjena procesa je podržana na sistemima koji podržavaju imenovane cijevi ( FIFO ) ili metodu / dev / fd za imenovanje otvorenih datoteka. Uzima se oblik <( list ) ili > ( lista ) . Lista procesa se pokreće sa svojim ulazom ili izlazom spojenim na FIFO ili neku datoteku u / dev / fd . Ime ove datoteke se prenosi kao argument za trenutnu komandu kao rezultat proširenja. Ako se koristi formular > ( lista ) , upisivanje u datoteku obezbeđuje ulaz za listu . Ako se koristi formular <( list ) , datoteka koja se prenosi kao argument treba pročitati da bi se dobila izlaz liste .

Kad je dostupno, zamjena procesa se vrši istovremeno s parametrima i varijabilnom ekspanzijom, zamjenom komandi i aritmetičkom ekspanzijom.

Razdvajanje riječi

Šutiranje skenira rezultate ekspanzije parametara, zamene komandi i aritmetičke ekspanzije koja se nije pojavila u dvostrukim navodnicima za podelu riječi .

Šarka tretira svaki karakter IFS-a kao razdjelnik, i razdvaja rezultate drugih ekspanzija u reči na ovim likovima. Ako IFS nije postavljen, ili njegova vrijednost je tačno , podrazumevana vrijednost, onda bilo koji niz IFS znakova služi za razdvajanje riječi. Ako IFS ima vrednost drugačiju od podrazumevane, tada se na početku i kraju reči ignorišu sekvence prostora sa razmacima i tabova , sve dok se znak za prosecanje prelazi u vrednost IFS-a ( IFS- ov znak). Svaki karakter u IFS-u koji nije IFS prostrani prostor, zajedno sa bilo kojim susednim znakovima IFS-a , ograničava polje. Sekvenca IFS praznih znakova takođe se tretira kao razdjelnik. Ako je vrijednost IFS- a nula, ne dijeli se razdvajanje riječi.

Izričite nultalne argumente ( "" ili "" ) se zadržavaju. Neprikoteni implicitni null argumenti, koji su rezultat širenja parametara koji nemaju vrijednosti, uklanjaju se. Ako se parametar bez vrednosti proširuje u dvostruke navodnike, nulti argument se prikazuje i zadržava se.

Imajte na umu da ako se ne dođe do ekspanzije, ne vrši se razdvajanje.

Proširenje putanje

Nakon razdvajanja riječi, osim ako je opcija -f postavljena, bash skenira svaku riječ za znakove * ,? , i [ . Ako se pojavi jedan od ovih znakova, riječ se smatra jednim oblikom i zamjenjuje se sa alfabetskim sortiranim listom imena datoteka koja odgovaraju obrazcu. Ako se ne pronađu odgovarajuća imena datoteka, a opcija shell-a nullglob je onemogućena, riječ ostane nepromenjena. Ako je opcija nullglob podešena i ne pronađe se podudaranja, reč se uklanja. Ako je opcija shell omogućena nocaseglob , utakmica se vrši bez obzira na slučaj abecednih znakova. Kada se šablon koristi za proširenje putanje, znak "`. "" Na početku imena ili odmah nakon crtice mora biti eksplicitno uparen, osim ako nije podešena opcija dotgloba shell-a. Kada se podudaraju sa putanjskom oznakom, znak kosa mora uvek biti eksplicitno usklađen. U drugim slučajevima, znak ``. '' Se ne tretira posebno. Pogledajte opis prodavnice ispod ispod SHELL BUILTIN COMMANDS za opis nocaseglob , nullglob i dotglob shell opcija.

GLOBIGNORE shell promenljiva se može koristiti za ograničavanje imena imena datoteka koja odgovaraju obrazcu . Ako je postavljeno GLOBIGNORE , svako odgovarajuće ime datoteke koje se takođe poklapa sa nekim od šablona u GLOBIGNORE- u uklanja se sa liste mečeva. Imena datoteka "`. "" I ".. .." uvijek se zanemaruju, čak i kada je podešen GLOBIGNORE . Međutim, podešavanje GLOBIGNORE-a ima efekat omogućavanja opcije dotglob shell, tako da će sva druga imena datoteka koja počinju sa ``. '' Biti usklađena. Da biste stari ponašanje ignorisali imena datoteka počevši od ``. '' , Napravite ``. * '' Jedan od šablona u GLOBIGNORE-u . Opcija dotglob je onemogućena kada je GLOBIGNORE isključen.

Usklađivanje šablona

Svaki znak koji se pojavljuje u šablonu, osim onih koji su opisani u daljem tekstu, podudaraju se s njim. Znak NUL se možda ne pojavljuje u šablonu. Posebni znakovi uzorka moraju biti citirani ako se one moraju uporediti bukvalno.

Posebni znakovi karaktera imaju sledeće značenje:

*

Ispunjava bilo koji niz, uključujući i null string.

?

Odgovara bilo kom pojedincu.

[...]

Ispunjava bilo koji od zatvorenih znakova. Par znakova razdvojenih vezom označava opseg izraza ; bilo koji lik koji sortira između ova dva znaka, uključujući, koristeći sekvencu sakupljanja trenutnog jezika i skup znakova, odgovara. Ako je prvi znak koji sledi [ je ! ili ^ ^ onda se svaki znak koji nije priložen odgovara. Redosled redosleda karaktera u izrazima opsega određuje se trenutnom lokalnom i vrijednošću varijable LC_COLLATE shell-a, ako je postavljeno. A - može se upariti uključivanjem kao prvi ili poslednji karakter u skupu. A ] se može upariti uključivanjem kao prvi znak u skupu.

U okviru [ i ] , klase znakova mogu biti specificirane pomoću sintakse [: class :] , gdje je klasa jedna od sljedećih klasa definisanih u standardu POSIX.2:

alnum alpha ascii prazno cntrl cifra grafički donji isječak punct prostor gornja reč xdigit
Klasa znakova odgovara svakom karakteru koji pripadaju toj klasi. Klasa znakova odgovara slovima, ciframa i karakteru _.

U okviru [ i ] , klasu ekvivalencije se može odrediti pomoću sintakse [= c =] , koja se podudara s svim karakterima sa istom težinom skupa (kao što je definisano trenutnim lokalitetom) kao znak c .

U okviru [ i ] , sintaksa [. simbol .] odgovara simbolu simbola za upoređivanje.

Ako je opcija " extglob shell" omogućena pomoću ugrađene trgovine , prepoznati su nekoliko operatera za usklađivanje uzoraka. U sledećem opisu, lista obrazaca je lista jednog ili više šablona razdvojenih od strane | . Kompozitni obrasci se mogu formirati pomoću jednog ili više od sledećih pod-obrazaca:

? ( obrazac-lista )

Odgovara nula ili jedna pojava datih šema

* ( obrazac-lista )

Ispunjava nultu ili više pojava date dijagrama

+ ( lista obrazaca )

Podudara se sa jednim ili više pojava datih obrazaca

@ ( obrazac-lista )

Podudaranje tačno jedan od datih šablona

! ( obrazac-lista )

Podudara se s jednim od datih šema

Citat Removal

Nakon prethodnih ekspanzija, uklonjeni su svi neotkriveni pojavi karaktera \ , ' i ' koji nisu rezultat jedne od gore navedenih proširenja.

REDIRECTION

Pre nego što se komanda izvrši, njen ulaz i izlaz se mogu preusmeriti koristeći posebnu notaciju koju tumači shell. Preusmeravanje se takođe može koristiti za otvaranje i zatvaranje datoteka za trenutno okruženje izvršenja. Sledeći operateri za preusmeravanje mogu prethoditi ili pojaviti bilo gdje u okviru jednostavne naredbe ili mogu slijediti naredbu . Preusmeravanja se obrađuju redosledom koji se pojavljuje, s leva na desno.

U narednim opisima, ako je broj deskriptora datoteke izostavljen, a prvi karakter operatera za preusmeravanje je < , preusmjeravanje se odnosi na standardni ulaz (deskriptor datoteke 0). Ako je prvi karakter operatera za preusmeravanje > , preusmeravanje se odnosi na standardni izlaz (deskriptor datoteke 1).

Reč koja sledi operateru za preusmeravanje u sledećim opisima, osim ako nije drugačije naznačeno, podvrgnuta je ekspanziji brazda, ekspanziji tilde, ekspanziji parametara, zameni komandi, aritmetičkom ekspanziji, uklanjanju citata, proširenju putanje i razdvajanju riječi. Ako se proširi na više riječi, bash prijavi grešku.

Imajte na umu da je redosled preusmeravanja značajan. Na primjer, komanda

ls > dirlist 2 > & 1

usmerava i standardni izlaz i standardnu ​​grešku u datoteku dirlist , dok komanda

ls 2 > & 1 > dirlist

usmerava samo standardni izlaz na datoteku dirlist , jer je standardna greška duplirana kao standardni izlaz pre nego što je standardni izlaz preusmeren na dirlist .

Bash rukuje nekoliko imena datoteka posebno kada se koriste u redirekcijama, kako je opisano u sljedećoj tabeli:

/ dev / fd / fd

Ako je fd validan cijeli broj, deskriptor fd je dupliran.

/ dev / stdin

Deskriptor datoteke 0 je dupliran.

/ dev / stdout

Deskriptor datoteka 1 je dupliran.

/ dev / stderr

Deskriptor datoteka 2 je dupliran.

/ dev / tcp / host / port

Ako je host važeći hostname ili Internet adresa, a port je broj celog broja ili ime usluge, bash pokušava da otvori TCP konekciju u odgovarajući soket.

/ dev / udp / host / port

Ako je host važeći hostname ili Internet adresa, a port je broj celog broja ili ime usluge, bash pokušava da otvori UDP vezu sa odgovarajućim soketom.

Neuspjeh otvaranja ili kreiranje datoteke dovodi do neuspjeha preusmeravanja.

Redirecting Input

Preusmeravanje unosa uzrokuje datoteku čije ime je rezultat širenja reči koja će se otvoriti za čitanje na deskriptoru n , ili standardni ulaz (deskriptor datoteke 0) ako n nije naveden.

Opšti format za unos preusmeravanja je:

[ n ] < riječ

Preusmeravanje izlaza

Preusmeravanje izlaza izaziva datoteku čije ime rezultira proširenjem riječi koja će biti otvorena za pisanje na deskriptoru n ili standardni izlaz (deskriptor datoteke 1) ako n nije naveden. Ako datoteka ne postoji, kreira se; ako postoji, skraćen je na nulu.

Opšti format za preusmeravanje izlaza je:

[ n ] > reč

Ako je operater za preusmeravanje > , a opcija noclobber za podešeno ugrađeno je omogućena, preusmjeravanje će propasti ako datoteka koja čije ime proizilazi iz širenja riječi postoji i redovna datoteka. Ako je operator preusmerenja>> , ili je operater za preusmeravanje >> a opcija noclobber za podešenu ugrađenu komandu nije omogućena, preusmeravanje se pokušava čak i ako datoteka postoji po imenu.

Dodavanje preusmjerenog izlaza

Preusmeravanje izlaza na ovaj način uzrokuje datoteku čije ime je rezultat proširenja riječi koja će se otvoriti za dodavanje na deskriptor n ili standardni izlaz (deskriptor datoteke 1) ako n nije specificiran. Ako datoteka ne postoji, kreira se.

Opšti format za dodavanje izlaza je:

[ n ] >> riječ

Preusmeravanje standardnog izlaza i standardne greške

Bash omogućava i standardni izlaz (deskriptor datoteke 1) i standardni izlaz greške (deskriptor datoteke 2) koji se preusmerava u datoteku čije je ime širenje riječi s ovim konstruktom.

Postoje dva formata za preusmeravanje standardnog izlaza i standardnu ​​grešku:

&> riječ

i

> i reč

Od ova dva oblika, prvo je poželjno. Ovo je semantički jednako

> riječ 2 > & 1

Ovde dokumenti

Ova vrsta preusmeravanja instruiše ljusku da pročita ulazak iz trenutnog izvora dok se ne vidi linija koja sadrži samo riječ (bez zatvarača). Sve linije koje se čita do te tačke se zatim koriste kao standardni unos za naredbu.

Format dokumenata je:

<< [ - ] riječi riječi ovdje-dokument

Nema ekspanzije parametara, zamene naredbe, aritmetičke ekspanzije ili proširenja putanje na riječi . Ako se citira bilo koji znak u rečju , razdjelnik je rezultat uklanjanja citata na riječi , a linije u dokumentu ovdje nisu proširene. Ako je riječ nekotiran, sve linije ovdje-dokumenta podležu ekspanziji parametara, zamjeni naredbi i aritmetičkom ekspanziji. U drugom slučaju, sekvenca karaktera \ je ignorisana i \ mora se koristiti za crtanje znakova \ , $ , i ` .

Ako je operater za preusmeravanje << - , onda su svi vodeći znakovi lika odvojeni od ulaznih linija i linije koja sadrži razdjelnik . Ovim se dozvoljava da dokumenti unutar graničnog pisma budu narušeni na prirodan način.

Ovde Strings

Varijanta ovde dokumenti, format je:

<<< reč

Reč je proširen i isporučen komandi na njegovom standardnom ulazu.

Duplikacija deskriptora datoteka

Operator preusmeravanja

[ n ] <& riječ

koristi se za dupliranje deskriptora ulaznih datoteka. Ako se riječ proširuje na jednu ili više cifara, deskriptor datoteke označen sa n postaje kopija tog deskriptora datoteke. Ako cifre u rečima ne navode opis datoteke koji je otvoren za unos, dođe do greške pri preusmeravanju. Ako riječ procjenjuje na - , deskriptor datoteke je zatvoren. Ako n nije naveden, koristi se standardni ulaz (deskriptor datoteke 0).

Operater

[ n ] > reč

koristi se slično kao kod duplikatnih deskriptora izlaznih datoteka. Ako n nije naveden, koristi se standardni izlaz (deskriptor datoteke 1). Ako cifre u rečima ne navode opis datoteke koji je otvoren za izlaz, dolazi do greške preusmeravanja. Kao poseban slučaj, ako je n izostavljen, a reč se ne širi na jednu ili više cifara, standardni izlaz i standardna greška se preusmeravaju kao što je ranije opisano.

Moving File Descriptors

Operator preusmeravanja

[ n ] <& cifra -

premješta cifru deskriptora datoteke u deskriptor datoteke ili standardni ulaz (deskriptor datoteke 0) ako n nije naveden. cifra je zatvorena nakon što se duplira na n .

Slično tome, operator preusmeravanja

[ n ] > i cifra -

premješta cifru deskriptora datoteke u deskriptor datoteke ili standardni izlaz (deskriptor datoteke 1) ako n nije naveden.

Otvaranje deskriptora datoteka za čitanje i pisanje

Operator preusmeravanja

[ n ] <> reč

uzrokuje datoteku čije ime je proširenje reči koja će se otvoriti za čitanje i pisanje na deskriptoru datoteke n ili na deskriptoru datoteke 0 ako n nije naveden. Ako datoteka ne postoji, kreira se.

ALIASE

Aliases dozvoljavaju da se string zamijeni za reč kada se koristi kao prva reč jednostavne komande. U shell-u se nalazi lista alijasa koje se mogu podesiti i isključiti sa alijasima i unalias builtin komandama (pogledajte SHELL BUILTIN COMMANDS ispod). Prva reč svake naredbe, ako se ne kotira, proverava se da li ima pseudonim. Ako je tako, ta reč zamenjuje se tekstom pseudonimom. Ime alijaske i zamenski tekst mogu sadržavati bilo koji važeći shell ulaz, uključujući i gore pomenute metacharacters , izuzev ako ime alijasca možda ne sadrži = . Prva riječ zamjenskog teksta testirana je za pseudonima, ali riječ koja je identična proširenom pseudonimu nije proširena po drugi put. To znači da se može pretvoriti u ls -F , na primjer, a bash ne pokušava rekurzivno proširiti tekst zamjene. Ako je poslednji karakter vrijednosti vrijednosti prazan , sljedeća komanda riječi koja sledi alijasu se također provjerava za ekspoziju.

Aliases se kreiraju i navode sa komandom alias i uklanjaju se sa unalias komandom.

Ne postoji mehanizam za korištenje argumenata u tekstu zamjene. Ako su potrebni argumenti, treba koristiti funkciju školjke (pogledajte FUNKCIJE ispod).

Alijasi se ne šire kada shell nije interaktivan, osim ako je opcija shell_aliases podešena koristeći shopt (pogledajte opis shopt ispod SHELL BUILTIN COMMANDS ispod).

Pravila koja se odnose na definiciju i upotrebu alijasa su donekle zbunjujuća. Bash uvek čita bar jednu kompletnu liniju unosa pre nego što izvrši bilo koju komandu na toj liniji. Aliases se proširuju kada se komanda čita, a ne kada se izvršava. Prema tome, definicija pseudonima koja se pojavljuje na istoj liniji kao i druga komanda ne stupa na snagu dok se ne pročita sledeća linija unosa. Novi naredbi ne utiče na naredbe koje slede definiciju alijanse na toj liniji. Ovo ponašanje je takođe problem kada se funkcije izvršavaju. Aliases se proširuju kada se pročita definicija funkcije, a ne kada se funkcija izvrši, jer je definicija funkcije sama komanda. Kao posledica toga, alias definisani u funkciji nisu dostupni sve dok se ta funkcija ne izvrši. Da biste bili sigurni, uvek definišite definicije na posebnoj liniji i nemojte koristiti pseudonim u komandnim jedinicama.

Za skoro svaku svrhu, alias se zamenjuju funkcijama školjke.

FUNKCIJE

Funkcija školjke, definisana kao gore opisana pod SHELL GRAMMAR-om , čuva seriju naredbi za kasnije izvršenje. Kada se ime shell funkcije koristi kao jednostavno ime komande, izvršava se lista komandi povezanih sa tom funkcijom. Funkcije se izvršavaju u kontekstu trenutne ljuske; nijedan novi proces nije stvoren kako bi ih tumačio (to je suprotno s izvršavanjem shell skripte). Kada se funkcija izvrši, argumenti za funkciju postaju parametri pozicije tokom njegovog izvršenja. Specijalni parametar # se ažurira kako bi odražavao promjenu. Pozicijski parametar 0 je nepromenjen. FUNCNAME varijabla je postavljena na ime funkcije dok se funkcija izvršava. Svi ostali aspekti okruženja za izvršenje školjke su identični između funkcije i pozivaoca, izuzev da je zamka DEBUG (pogledajte opis ugrađenog zamka ispod SHELL BUILTIN COMMANDS ispod) nije nasledjen osim ako je funkcija dodeljena atributu traga ( pogledajte opis deklarisanja ugrađenog ispod).

Varijable koje su lokalne za funkciju mogu biti proglašene lokalnom ugrađenom komandom. Obično, promenljive i njihove vrijednosti dele se između funkcije i pozivaoca.

Ako se u funkciji izvrši ugrađeni komandni povratak , funkcija se završava i izvršenje se nastavlja s sljedećom komandom nakon poziva funkcije. Kada se funkcija završi, vrijednosti parametara položaja i posebnog parametra # se vraćaju na vrijednosti koje su imale prije izvršenja funkcije.

Imena funkcija i definicije mogu biti navedene sa opcijom -f za proglašavanje ili konfigurisanje naredbi. Opcija -F za deklarisanje ili oblikovanje će navesti samo imena funkcija. Funkcije se mogu izvoziti tako da ih podsloni automatski definišu sa opcijom -f za ugrađeni izvoz .

Funkcije mogu biti rekurzivne. Ne ograničava se broj rekurzivnih poziva.

ARITMETSKA EVALUACIJA

Škable dozvoljava procenu aritmetičkih izraza, pod određenim okolnostima (pogledajte komandu pustite ugrađenu i aritmetičku ekspanziju ). Evaluacija se vrši u celinama sa fiksnom širinom bez provere za preliv, iako je podjeljenjem od 0 zarobljeno i označeno kao greška. Operatori i njihov prioritet i asocijativnost su isti kao u jeziku C. Sljedeća lista operatora je grupisana na nivoe operatora jednakog precedenta. Nivoi su navedeni u redosledu smanjenja prvenstva.

id ++ id -

varijabilni post-inkrement i post-dekretment

++ id - id

varijabilni pre-increment i pred-dekretiranje

- +

unary minus i plus

! ~

logička i bitna negacija

**

eksponencijacija

* /%

razmnožavanje, podela, ostatak

+ -

dodavanje, oduzimanje

<< >>

leva i desna bitna pomaka

<=> = <>

poređenje

==! =

jednakost i nejednakost

&

bitno AND

^

bitno ekskluzivno ILI

|

bitno ILI

&&

logički AND

||

logičan ILI

expr ? expr : expr

uslovna evaluacija

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

zadatak

expr1 , expr2

zapona

Šelne varijable su dozvoljene kao operande; proširenje parametara se vrši pre nego što se izraz izračuna. Unutar izraza, varijable ljuske se takođe mogu referencirati po imenu bez korišćenja sintakse širenja parametara. Vrednost varijable se ocjenjuje kao aritmetički izraz kada se referencira. Šarišna varijabla ne mora imati atribut integer koji je uključen da se koristi u izrazu.

Konstante sa vodećim 0 se tumače kao oktalni brojevi. Vodeći 0x ili 0X označava heksadecimalno. U suprotnom brojevi uzimaju oblik [ base # ] n, gde je osnova decimalni broj između 2 i 64 koji predstavljaju aritmetičku bazu, a n je broj u toj bazi. Ako je osnova # izostavljena, onda se koristi baza 10. Cifre veće od 9 prikazane su malim slovima, velikim slovima, @ i _, u tom redosledu. Ako je osnova manja ili jednaka 36, ​​mala i velika slova mogu se zamjenjivati ​​za brojeve između 10 i 35.

Operatori se ocjenjuju po redosledu. Pod-izrazi u zagradama se prvo procenjuju i mogu nadmašiti gore navedena pravila precedentnih pravila.

UGOVORNI IZAZOVI

Uslovne izraze koriste komanda [[ compound compound i test i [ builtin commands za testiranje atributa datoteka i izvršavanje nizova i aritmetičkih upoređivanja. Izrazi se formiraju iz sljedećih ugarskih ili binarnih primarnih. Ako je bilo koji fajl argument za jedan od primarnih obrazaca je / dev / fd / n , onda je deskriptor n označen. Ako je fajl argument za jedan od primarnih je jedan od / dev / stdin , / dev / stdout , ili / dev / stderr , označen je deskriptor datoteke 0, 1 ili 2, respektivno.

-a fajl

Istina ako postoji datoteka .

-b datoteka

Istina ako datoteka postoji i predstavlja posebnu datoteku za blok.

-c fajl

Istina ako datoteka postoji i predstavlja posebnu datoteku karaktera.

-d fajl

Istina ako postoji datoteka i je direktorij.

- datoteka

Istina ako postoji datoteka .

-f fajl

Istina ako postoji datoteka i koja je redovna datoteka.

-g fajl

Istina ako postoji datoteka i je set-group-id.

-h fajl

Istina ako datoteka postoji i predstavlja simboličku vezu.

-k datoteka

Istina ako postoji datoteka i postavljen je njegov "sticky" bit.

-p datoteka

Istina ako postoji datoteka i naziva se cijev (FIFO).

-r fajl

Istina ako datoteka postoji i može se čitati.

-s datoteka

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

-t fd

Istina ako je deskriptor fd otvoren i odnosi se na terminal.

-u fajl

Istina ako datoteka postoji i podešen je njegov set-user-id bit.

-w fajl

Istina ako datoteka postoji i može se pisati.

-x fajl

Istina ako datoteka postoji i može se izvršiti.

-O file

Istina ako datoteka postoji i poseduje efektivan korisnički ID.

-G fajl

Istina ako datoteka postoji i nalazi se u vlasništvu efektivne grupe ID-a.

-L fajl

Istina ako datoteka postoji i predstavlja simboličku vezu.

-S fajl

Istina ako datoteka postoji i predstavlja utičnicu.

-N datoteku

Istina ako datoteka postoji i modifikovana je od poslednjeg čitanja.

file1 - nt file2

Istina ako je datoteka1 novija (prema datumu modifikacije) od datoteke2 , ili ako datoteka1 postoji i datoteka2 ne.

file1 - ot file2

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

file1 -ef file2

Istina ako se datoteka1 i datoteka2 odnose na iste brojeve uređaja i inoda.

-o optim

Istina ako je omogućena opt . Pogledajte listu opcija pod opisom opcije -o do postavljenog dolje.

-z niz

Istina ako je dužina niza nula.

-n string

string

Istina ako je dužina niza nula.

string1 == string2

Istina ako su stringovi jednaki. = može se koristiti umesto == za strogu POSIX saglasnost.

string1 ! = string2

Istina je da li su stringovi jednaki.

string1 < string2

Istina ako string1 sortira prije string2 leksikografski u trenutnom jeziku.

string1 > string2

Istina ako string1 sortira po string2 leksikografski u trenutnom jeziku.

arg1 OP arg2

OP je jedan od -eq , -ne , -lt , -le , -gt ili -ge . Ovi aritmetički binarni operateri vraćaju se tačno ako je arg1 jednak, ne jednak, manje od, manje ili jednak većem od ili većem od ili jednak arg2 , respektivno. Arg1 i arg2 mogu biti pozitivni ili negativni celi brojevi.

SIMPLE COMMAND EXPANSION

Kada se izvrši jednostavna komanda, shell izvršava sledeće proširenja, zadatke i preusmeravanja, s leva na desno.

1.

Reči koje je parser označio kao varijabilne zadatke (one koje prethodi imenu komande) i redirekcije su sačuvane za kasniju obradu.

2.

Reči koje nisu varijabilne zadatke ili preusmeravanja su proširene. Ako bilo koja reči ostane nakon ekspanzije, prva riječ je uzeta kao ime komande, a preostale reči su argumenti.

3.

Preusmeravanja se izvršavaju kao što je gore opisano u REDIRECTION .

4.

Tekst nakon = u svakom zadatku promjene prolazi ekspanzijom tilde, ekspanzijom parametara, supstitucijom naredbe, aritmetičkom ekspanzijom i uklanjanjem citata pre nego što se dodeli varijabli.

Ako se ne izvede naziv komande, dodjeljivanje varijabli utječe na trenutno okruženje okruženja. Inače, varijable se dodaju okruženju izvršene komande i ne utiču na trenutno okruženje shell-a. Ako bilo koja od zadataka pokuša da dodeli vrednost promenljivoj čitaču, dođe do greške i komanda izlazi sa statusom koji nije nula.

Ako nijedno ime komande nije rezultat, preusmjeravanja se izvršavaju, ali ne utiču na trenutno okruženje okruženja. Greška preusmeravanja dovodi do toga da komanda izađe sa statusom koji nije nula.

Ako je nakon proširenja ostalo komandno ime, izvršenje se nastavlja kako je opisano u nastavku. U suprotnom, naredba izlazi. Ako je jedan od proširenja sadržao zamenu naredbe, status izlaznog komande je status izlazne zadnje izmjene izvršene naredbe. Ako nije bilo zamjena naredbe, komanda izlazi sa statusom nule.

IZVRŠENJE KOMANDE

Nakon što je komanda podeljena na riječi, ako rezultira jednostavnom komandom i opcionom popisom argumenata, preduzimaju se sljedeće akcije.

Ako ime komande ne sadrži kose, shell pokušava da ga locira. Ako na to ime postoji funkcija školjke, ta funkcija se poziva kao što je gore opisano u FUNKCIJAMA . Ako se ime ne podudara s funkcijom, shell ga pretraži na listi ugrađenih granata. Ako se pronađe meč, pozvana je ona ugrađena.

Ako ime nije ni granična funkcija niti je izgrađena, a ne sadrži slashes, bash pretražuje svaki element PATH-a za direktorijum koji sadrži izvršnu datoteku sa tim imenom. Bash koristi hešnu tablicu da bi zapamtio pune imena puteva izvršnih datoteka (pogledajte haš ispod SHELL BUILTIN COMMANDS ispod). Potpuno pretraživanje direktorija u PATH-u se vrši samo ako komanda nije pronađena u tabeli heš. Ako je pretraga neuspešna, shell otvara poruku o grešci i vraća status izlaznog broja 127.

Ako je pretraga uspešna, ili ako ime komande sadrži jednu ili više slizusa, shell izvršava imenovani program u odvojenom okruženju izvršenja. Argument 0 je postavljen na dato ime, a ostali argumenti komandi su postavljeni na datim argumentima, ako ih ima.

Ako ovo izvršenje ne uspije jer datoteka nije u izvršnom formatu, a datoteka nije direktorij, pretpostavlja se da je shell skripta , datoteka koja sadrži shell komande. Podgrupa se pokreće da bi je izvršila. Ova podrezica se ponovo inicijalizira, tako da je efekat kao da je nova ljuska bila pozvana da obradi skriptu, s izuzetkom da dete zadržava lokacije komandi zapamćenih od roditelja (pogledajte heš ispod SHELL BUILTIN COMMANDS ).

Ako je program datoteka koja počinje sa #! , ostatak prve linije određuje tumača za program. Škable izvršava određeni tumač na operativnim sistemima koji sami ne obrađuju ovaj izvršni format. Argumenti za tumača se sastoje od jednog opcionog argumenta koji sledi nazivu tumača u prvoj liniji programa, a zatim sledi ime programa, a zatim i argumenti naredbe, ako ih ima.

OKRUŽENJE KOMANDNE IZVRŠENJE

Škafa ima okruženje izvršenja koje se sastoji od sledećeg:

*

otvorite fajlove koje je nasledila ljuska prilikom pozivanja, kao što je modifikovano preusmeravanjem isporučenim na exec builtin

*

trenutni radni direktorij koji je postavio cd , pushd ili popd , ili naslijedio ga shell na pozivu

*

masku moda kreiranja datoteke koja je postavljena od strane umask ili nasledila od roditelja ljuske

*

trenutne zamke postavljene od strane zamke

*

parametre ljuske koje se postavljaju dodeljivanjem varijabli ili sa postavljenim ili nasleđenim od roditelja školjke u okruženju

*

shell funkcije definisane tokom izvršenja ili nasleđene od roditelja školjke u okruženju

*

opcije omogućene prilikom pozivanja (bilo podrazumevano ili sa argumentima komandne linije) ili postavljeno

*

opcije omogućene od strane shopt

*

lažne oznake definirane sa pseudonimom

*

različite ID-ove procesa, uključujući i one pozadinskih poslova, vrijednost $$ i vrijednost $ PPID-a

Kada se izvrši jednostavna komanda osim ugrađene ili granične funkcije, ona se poziva u posebnom okruženju izvršenja koje se sastoji od sledećeg. Osim ako nije drugačije naznačeno, vrednosti su nasleđene iz ljuske.

*

otvorene datoteke shell-a, plus sve modifikacije i dodatke specificirane preusmeravanjem komandi

*

trenutni radni direktorijum

*

maska ​​za kreiranje datoteka

*

shell promenljive označene za izvoz, zajedno sa varijablama koje se izvoze za komandu, prošle su u okruženju

*

zamke koje uhvate ljuska se resetuju na vrijednosti koje su nasleđene od roditelja školjke, a zamke koje su ignorisane od strane ljuske ignorisane su

Komanda koja se poziva u ovom odvojenom okruženju ne može uticati na okruženje izvršenja shell-a.

Zamjena komandi i asinhroni komande se pozivaju u okruženju podgrupe koje je duplikat školskog okruženja, osim što se zamke koje uhvati ljuska resetuju na vrijednosti koje je ljeka nasledila od roditelja na poziv. Izrađene komande koje se pozivaju kao dio plinovoda takođe se izvršavaju u okruženju podgrupe. Promjene izvršene u okruženju podgrupe ne mogu uticati na okruženje izvršenja shell-a.

Ako komandom sledi kontrola & i job nije aktivna, podrazumevani standardni ulaz za komandu je prazna datoteka / dev / null . U suprotnom, pozivana naredba nasledi deskriptore datoteke pozivne ljuske koja su modifikovana preusmeravanjem.

VIDI TAKO

Bash Reference Manual , Brian Fox i Chet Ramey

Gnu Readline biblioteka , Brian Fox i Chet Ramey

Biblioteka istorije Gnu , Brajan Foks i Čet Ramej

Prenosivi interfejs operativnog sistema (POSIX) Dio 2: Shell and Utilities , IEEE

sh (1), ksh (1), csh (1)

emacs (1), vi (1)

readline (3)