Bash - Linux Command - Komanda Unix

NAME

bash - GNU Bourne-Again SHell

PËRMBLEDHJE

bash [options] [file]

PËRSHKRIM

Bash është një sh -interpreti i komandës së komandës që ekzekuton komandat e lexuara nga hyrja standarde ose nga një skedar. Bash përfshin gjithashtu karakteristika të dobishme nga predha Korn dhe C ( ksh dhe csh ).

Bash ka për qëllim të jetë një implementim konform i specifikave IEEE POSIX Shell dhe Tools (IEEE Working Group 1003.2).

OPSIONE

Përveç opsioneve të skedarit të karakterit të vetëm të dokumentuar në përshkrimin e komandës së integruar ndërtuar, bash interpreton opsionet e mëposhtme kur thirret:

-c string

Nëse opsioni -c është i pranishëm, atëherë komandat lexohen nga vargu . Nëse ka argumente pas vargut , ato u caktohen parametrave pozicionalë, duke filluar me $ 0 .

-i

Nëse opsioni i -i është i pranishëm, predha është interaktive .

-l

Bëni bash të veprojë sikur të ishte thirrur si një shell login (shih INVOCATION më poshtë).

-r

Nëse opsioni -r është i pranishëm, shell bëhet i kufizuar (shih KUFIZUAR SHELL më poshtë).

-s

Nëse ops -i -s është i pranishëm, ose nëse asnjë argument nuk mbetet pas përpunimit të opsioneve, atëherë komandat lexohen nga hyrja standarde. Ky opsion lejon që parametrat e pozicionit të vendosen kur thirren me një shell interaktiv.

-D

Një listë e të gjitha vargjeve të dyfishtë të cituara paraprakisht nga $ shtypet në hyrjen standarde. Këto janë vargjet që i nënshtrohen përkthimit të gjuhës kur vendi aktual nuk është C ose POSIX . Kjo nënkupton opsionin -n ; asnjë komandë nuk do të ekzekutohet.

[- +] O [ shopt_option ]

shopt_option është një nga opsionet shell të pranuara nga shopt builtin (shih SHELL BUILTIN COMMANDS më poshtë). Nëse shopt_option është i pranishëm, -O vendos vlerën e atij opsioni; + O e merr atë. Nëse shopt_option nuk është furnizuar, emrat dhe vlerat e opsioneve shell pranuar nga shopt shtypen në dalje standarde. Nëse opsioni i thirrjes është + O , rezultati shfaqet në një format që mund të ripërdoret si input.

-

A - sinjalizon fundin e opsioneve dhe pamundëson përpunimin e mëtejshëm të opsioneve. Çdo argumente pas - trajtohen si emrat e skedave dhe argumentet. Një argument i - është ekuivalent me - .

Bash gjithashtu interpreton një numër opsionesh shumë karakteresh. Këto opsione duhet të paraqiten në rreshtin komandues para se të njihen opsionet e karakterit të vetëm.

--dump-PO-strings

Ekuivalent me -D , por prodhimi është në formatin e skedarit GNU gettext po (objekt portativ).

--dump-strings

Ekuivalent me -D .

--ndihmë

Shfaqni një mesazh përdorimi në dalje standarde dhe dalin me sukses.

- skedar i skedarit

skedar --rcfile

Ekzekutoni komandat nga dosja në vend të skedarit fillestar personal të inicializimit ~ / .bashrc nëse shell është interaktive (shih INVOCATION më poshtë).

--login

Ekuivalent me -1 .

--noediting

Mos përdorni bibliotekën GNU readline për të lexuar linjat e komandës kur shell është interaktive.

--noprofile

Mos lexoni as skedarin e fillimit të sistemit / etc / profile as ndonjë nga skedarët personal të inicializimit ~ / .bash_profile , ~ / .bash_login , ose ~ / .profile . By default, bash i lexon këto skeda kur thirret si një shell login (shih INVOCATION më poshtë).

--norc

Mos lexoni dhe ekzekutoni skedarin e inicializimit personal ~ / .bashrc nëse shell është interaktive. Ky opsion është aktiv nga default nëse shell është thirrur si sh .

--posix

Ndryshoni sjelljen e bash ku operacioni i parazgjedhur ndryshon nga POSIX 1003.2 për t'u përputhur me standardin ( modaliteti posix ).

--restricted

Shellja bëhet e kufizuar (shih KUFIZUAR SHELL më poshtë).

--rpm-kërkon

Prodhoni listën e skedarëve që janë të nevojshme për skriptin shell për të kandiduar. Kjo nënkupton '-n' dhe i nënshtrohet kufizimeve të njëjta si kontrollimi i kontrollit të gabimit të kohës së përpilimit; Backticks, [] testet, dhe evals nuk janë parsed kështu disa varësi mund të jenë të humbura. --verbose Ekuivalent me -v .

--version

Trego informacionin e versionit për këtë shembull të bash në dalje standarde dhe dalje me sukses.

argumentet

Nëse argumentet mbesin pas përpunimit të opsioneve, dhe as opsioni -c as -s nuk është ofruar, argumenti i parë supozohet të jetë emri i një skedari që përmban komandat shell. Nëse bash është thirrur në këtë mënyrë, $ 0 është vendosur në emrin e skedarit, dhe parametrat e pozicionit janë vendosur në argumentet e mbetura. Bash lexon dhe ekzekuton komanda nga ky skedar, pastaj del. Gjendja e daljes së Bashit është statusi i daljes së komandës së fundit të ekzekutuar në shkrimin. Nëse asnjë komandë nuk ekzekutohet, gjendja e daljes është 0. Përpjekja është bërë së pari për të hapur skedarin në dosjen aktuale, dhe nëse nuk gjendet asnjë skedar, atëherë shell kërkon direktoritë në PATH për skriptin.

thirrje e muzës

Një shell login është një karakter i parë i argumentit zero është një - ose filloi me opsionin --login .

Një shell interaktiv është një që fillon pa argumente jo opsionale dhe pa opsionin -c të cilit hyrja dhe dalja standarde e të dyja janë të lidhura me terminalet (siç përcaktohet nga isatty (3)), ose një ka filluar me opsionin -i . PS1 është vendosur dhe $ - përfshin i nëse bash është interaktive, duke lejuar një skriptë shell ose një skedar fillimi për të testuar këtë gjendje.

Paragrafet e mëposhtëm përshkruajnë se si bash ekzekuton dosjet e nisjes. Nëse ndonjë prej skedarëve ekziston, por nuk mund të lexohet, bash raporton një gabim. Tildët janë zgjeruar në emrat e skedarëve siç përshkruhet më poshtë nën zgjerimin Tilde në seksionin EXPANSION .

Kur bash thirret si një shell login interaktiv, ose si një shell jo-interaktive me opsionin -login , së pari lexon dhe ekzekuton komandat nga skedari / etc / profile , nëse ai skedar ekziston. Pas leximit të skedarit, duket për ~ / .bash_profile , ~ / .bash_login , dhe ~ / .profile , në atë mënyrë, dhe lexon dhe ekzekuton komandat nga i pari që ekziston dhe është i lexueshëm. Mundësia --noprofile mund të përdoret kur guaska është nisur për të penguar këtë sjellje.

Kur një shell identifikimi del, bash lexon dhe ekzekuton komandat nga skedari ~ / .bash_logout , nëse ekziston.

Kur një shell interaktive që nuk është një shell hyrjeje, bash lexon dhe ekzekuton komanda nga ~ / .bashrc , nëse ekziston një skedar. Kjo mund të pengohet duke përdorur opsionin --norc . Opsioni i skedarit --rcfile do të detyrojë bash për të lexuar dhe ekzekutuar komandat nga skedari në vend të ~ / .bashrc .

Kur bash ka nisur jo interaktivisht, për të drejtuar një skriptë shell, për shembull, ai kërkon variantin BASH_ENV në mjedis, zgjeron vlerën e tij nëse shfaqet aty dhe përdor vlerën e zgjeruar si emrin e një skedari për të lexuar dhe ekzekutuar . Bash sillet sikur të ekzekutoheshin komandat në vijim:

nëse [-n "$ BASH_ENV"]; pastaj. "$ BASH_ENV"; fi

por vlera e ndryshores PATH nuk përdoret për të kërkuar emrin e skedarit.

Nëse bash është thirrur me emrin sh , ai përpiqet të imitojë sjelljen e fillimit të versioneve historike të sh sa më afër të jetë e mundur, ndërsa në përputhje me standardin POSIX po ashtu. Kur thirret si një shell login interaktiv, ose një shell jo-interaktive me opsionin -login , së pari përpiqet të lexojë dhe ekzekutojë komandat nga / etc / profile dhe ~ / .profile , në atë mënyrë. Opsioni --noprofile mund të përdoret për të penguar këtë sjellje. Kur thirret si një shell interaktiv me emrin sh , bash kërkon ENV ndryshoren, zgjeron vlerën e saj nëse përcaktohet dhe përdor vlerën e zgjeruar si emrin e një skedari për të lexuar dhe ekzekutuar. Që nga një shell i thirrur si sh nuk përpiqet të lexojë dhe ekzekutojë komandat nga ndonjë fotografi të nisjes, opcioni --rcfile nuk ka efekt. Një shell jo-interaktiv që thirret me emrin sh nuk përpiqet të lexojë ndonjë fotografi të nisjes. Kur thirret si sh , bash hyn në modalitetin posix pasi të lexohen skedarët e nisjes.

Kur bash është nisur në modalitetin posix , si me opsionin e linjës së komandës --posix , ajo ndjek standardin POSIX për skedarët e nisjes. Në këtë mënyrë, predha interaktive zgjeron variablin ENV dhe komandat lexohen dhe ekzekutohen nga skedari, emri i të cilit është vlera e zgjeruar. Asnjë fotografi të nisjes nuk lexohen.

Bash përpiqet të përcaktojë se kur është duke u drejtuar nga demoni i largët shell, zakonisht rshd . Nëse bash përcakton se është duke u drejtuar nga rshd , ai lexon dhe ekzekuton komandat nga ~ / .bashrc , nëse ai skedar ekziston dhe është i lexueshëm. Kjo nuk do ta bëjë këtë nëse thirret si sh . Opsioni --norc mund të përdoret për të penguar këtë sjellje dhe opsioni --rcfile mund të përdoret për të detyruar një skedar tjetër që duhet lexuar, por rshd zakonisht nuk thirret në shell me ato opsione ose nuk lejon që ato të specifikohen.

Nëse shell fillon me përdoruesin efektiv (grupi) id nuk është i barabartë me idin e përdoruesit (grupit) të vërtetë dhe opsioni -p nuk furnizohet, nuk lexohen skedarë fillestarë, funksionet shell nuk trashëgohen nga mjedisi, SHELLOPTS ndryshueshme, nëse shfaqet në mjedis, injorohet, dhe id përdoruesi efektiv është vendosur në id vërtetë përdoruesit. Nëse opcioni -p është furnizuar në thirrje, sjellja e nisjes është e njëjtë, por përdoruesi i efektshëm i përdoruesit nuk është rivendosur.

PËRKUFIZIMET

Përkufizimet e mëposhtme përdoren gjatë pjesës tjetër të këtij dokumenti.

bosh

Një hapësirë ​​ose tab.

fjalë

Një sekuencë e karaktereve të konsideruara si një njësi e vetme nga predha. Gjithashtu i njohur si shenjë .

emër

Një fjalë e përbërë vetëm me karaktere alfanumerike dhe theksime, dhe duke filluar me një karakter alfabetik ose një nënshkrimi. Gjithashtu referuar si një identifikues .

metacharacter

Një karakter që, kur nuk qetësohet, ndan fjalët. Një nga këto që vijojnë:

| &; () <> tab hapësirë

operatori i kontrollit

Një shenjë që kryen një funksion kontrolli. Është një nga simbolet e mëposhtme:

|| &&&; ;; ()

FJALË E PARASHIKUARA

Fjalët e rezervuara janë fjalë që kanë një kuptim të veçantë për shell. Fjalët e mëposhtme njihen si të rezervuara kur nuk quhet dhe fjala e parë e një komande të thjeshtë (shih SHELL GRAMMAR më poshtë) ose fjala e tretë e një rasti ose për komandën:

! rasti do të bëhet elif tjetër esac fi për funksionin nëse në select pastaj deri në {} kohë [[]]

SHELL GRAMMAR

Komandat e thjeshta

Një komandë e thjeshtë është një sekuencë e caktimeve të variablave opsionalë të ndjekur nga fjalët e bardha të ndara dhe përcjelljet, dhe përfunduar nga një operator kontrolli . Fjala e parë përcakton komandën që duhet ekzekutuar dhe kalon si argument zero. Fjalët e mbetura miratohen si argumente për komandën e thirrur.

Vlera e kthimit të një komande të thjeshtë është statusi i daljes së tij, ose 128+ n nëse komanda ndërpritet nga sinjali n .

tubacionet

Një tubacion është një sekuencë e një ose më shumë komandave të ndara nga karakteri . Formati për një tubacion është:

[ koha [ -p ]] [! ] komanda [ | komandë2 ...]

Prodhimi standard i komandës është i lidhur nëpërmjet një tubi në hyrjen standarde të komandës2 . Ky lidhje kryhet para çdo përcjelljeje të specifikuar nga komanda (shih REDIRECTION më poshtë).

Nëse fjala e rezervuar ! përpara një tubacioni, statusi i daljes së atij tubacioni është NUK logjik i statusit të daljes së komandës së fundit. Përndryshe, statusi i tubacionit është statusi i daljes së komandës së fundit. Shell presin që të gjitha komandat në tubacion të përfundojnë para kthimit të një vlere.

Nëse fjala e rezervuar para kohe ka një tubacion, koha e kaluar si dhe përdoruesi dhe sistemi i konsumuar nga ekzekutimi i tij raportohen kur ndërpritet tubacioni. Opcioni -p ndryshon formatin e daljes në atë që përcaktohet nga POSIX. Variabli TIMEFORMAT mund të vendoset në një string format që specifikon se si duhet të shfaqet informacioni i kohës; shih përshkrimin e TIMEFORMAT nën Variablat Shell më poshtë.

Secili komandë në një tubacion ekzekutohet si një proces i veçantë (p.sh., në një nënkëndësh).

listat

Një listë është një rend i një ose më shumë tubacioneve të ndara nga një nga operatorët ; , & , && , ose || , dhe mundësisht ndërprerë nga një prej ; , & , ose .

Nga këta operatorë lista, && dhe || kanë përparësi të barabartë, pasuar nga ; dhe &, të cilat kanë përparësi të barabartë.

Një listë e një ose më shumë rreshta mund të shfaqen në një listë në vend të një pikëpresjeje për të ndrequr komandat.

Nëse një komandë ndërpritet nga operatori i kontrollit & , shell kryen komandën në sfond në një nënkëndësh. Shell nuk pret që komanda të përfundojë, dhe statusi i kthimit është 0. Komandat e ndara nga a ; ekzekutohen në mënyrë të vazhdueshme; predha pret që çdo komandë të përfundojë nga ana e tij. Statusi i kthimit është statusi i daljes së komandës së fundit të ekzekutuar.

Operatorët e kontrollit && dhe || tregojnë AND listat dhe OR listat, respektivisht. Një listë AND ka formën

komanda1 && komanda2

komanda 2 ekzekutohet nëse dhe vetëm nëse komanda 1 kthen statusin e daljes nga zero.

Një listë OR ka formën

command1 || command2

komanda 2 ekzekutohet nëse dhe vetëm nëse komanda 1 kthen një status të daljes jo-zero. Statusi i kthimit të AND dhe OR listave është statusi i daljes së komandës së fundit të ekzekutuar në listë.

Komandat e komplikuara

Një komandë e përbërë është një nga të mëposhtmet:

( lista )

lista ekzekutohet në një nënkëndësh. Caktimet e ndryshueshme dhe komandat builtin që ndikojnë në mjedisin e shell nuk mbesin në fuqi pas përfundimit të komandës. Statusi i kthimit është statusi i daljes së listës .

{ list ; }

lista thjesht ekzekutohet në mjedisin aktual shell. lista duhet të përfundojë me një rresht të ri ose pikëpresje. Kjo njihet si komanda e grupit . Statusi i kthimit është statusi i daljes së listës . Vini re se ndryshe nga metakaraktet ( dhe ) , { dhe } janë fjalë të rezervuara dhe duhet të ndodhin kur një fjalë e rezervuar lejohet të njihet. Meqenëse ato nuk shkaktojnë një fjalë, ata duhet të jenë të ndara nga lista nga hapësira e bardhë.

(( shprehje ))

Shprehja vlerësohet sipas rregullave të përshkruara më poshtë në VLERËSIM ARITMETIK . Nëse vlera e shprehjes është jo-zero, statusi i kthimit është 0; përndryshe statusi i kthimit është 1. Kjo është saktësisht e barabartë me " shprehjen ".

[[ shprehje ]]

Kthimi i një statusi 0 ose 1 në varësi të vlerësimit të shprehjes së shprehjes së kushtëzuar. Shprehjet përbëhen nga primaret e përshkruara më poshtë në SHPREHJET KUSHTETUESE . Ndarja e fjalëve dhe zgjerimi i shtegut nuk kryhen në fjalët midis [[ dhe ]] ; zgjerimi i tildes, parametri dhe zgjerimi i ndryshueshëm, zgjerimi aritmetik, zëvendësimi i komandës, zëvendësimi i procesit dhe heqja e kuotave.

Kur përdoren operatorët == dhe ! = , Vargu në të djathtë të operatorit konsiderohet një model dhe përputhet sipas rregullave të përshkruara më poshtë nën Përputhje me modele. Vlera e kthimit është 0 nëse string përputhet ose nuk përputhet me modelin, përkatësisht dhe 1 në të kundërtën. Çdo pjesë e modelit mund të citohet për ta detyruar atë të përputhet si një varg.

Shprehjet mund të kombinohen duke përdorur operatorët e mëposhtëm, të renditur në renditje rënëse të përparësisë:

( shprehje )

Jep vlerën e shprehjes . Kjo mund të përdoret për të anashkaluar përparësinë normale të operatorëve.

! shprehje

Vërtetë nëse shprehja është e rreme.

shprehje1 && expression2

Vërtetë nëse të dy shprehja1 dhe shprehja2 janë të vërteta.

shprehje1 || expression2 Vërtetë nëse ose expression1 ose expression2 është e vërtetë.

&& dhe || operatorët nuk e vlerësojnë shprehjen 2 nëse vlera e shprehjes1 është e mjaftueshme për të përcaktuar vlerën e kthimit të gjithë shprehjes së kushtëzuar.

për emrin [ fjalë ]; bëj listën ; e bërë

Lista e fjalëve që pasojnë është zgjeruar, duke gjeneruar një listë të artikujve. Emri i ndryshores është caktuar për çdo element të kësaj liste nga ana e tij, dhe lista ekzekutohet çdo herë. Nëse fjala fjalë është lënë jashtë, komanda e ekzekuton një herë për secilin parametër pozicionesh që është caktuar (shih PARAMETRAT më poshtë). Statusi i kthimit është statusi i daljes së komandës së fundit që ekzekutohet. Nëse zgjerimi i artikujve që vijojnë rezultatet në një listë të zbrazët, asnjë komandë nuk ekzekutohet dhe statusi i kthimit është 0.

për (( expr1 ; expr2 ; expr3 )); bëj listën ; e bërë

Së pari, shprehja aritmetike expr1 vlerësohet sipas rregullave të përshkruara më poshtë në VLERËSIM ARITMETIK . Shprehja aritmetike expr2 vlerësohet në mënyrë të përsëritur derisa vlerëson zero. Çdo herë që expr2 vlerëson në një vlerë jo-zero, lista ekzekutohet dhe shprehja aritmetike expr3 vlerësohet. Nëse ndonjë shprehje është lënë jashtë, sillet sikur vlerëson në 1. Vlera e kthimit është statusi i daljes së komandës së fundit në listë që ekzekutohet ose e rreme nëse ndonjë nga shprehjet është e pavlefshme.

zgjidhni emrin [ fjalë ]; bëj listën ; e bërë

Lista e fjalëve që pasojnë është zgjeruar, duke gjeneruar një listë të artikujve. Grupi i fjalëve të zgjeruara shtypet në gabimin standard, secili paraprihet nga një numër. Nëse fjala fjalë është lënë jashtë, parametrat e pozicionit shtypen (shih PARAMETRAT më poshtë). Shpejtësi PS3 pastaj shfaqet dhe një linjë lexohet nga hyrja standarde. Nëse vija përbëhet nga një numër që korrespondon me një nga fjalët e shfaqura, atëherë vlera e emrit është vendosur në atë fjalë. Nëse rreshti është i zbrazët, fjalët dhe gatishmëria shfaqen përsëri. Nëse lexohet EOF, komanda përfundon. Çdo vlerë tjetër e lexuar shkakton që emri të vendoset në zero. Linja lexohet në variabël REPLY . Lista ekzekutohet pas secilës përzgjedhje derisa të ekzekutohet një komandë pushimi . Statusi i daljes së zgjedhur është statusi i daljes së komandës së fundit të ekzekutuar në listë , ose zero nëse nuk ekzekutohen komandat.

fjalën e rastit [[() model [ | model ]

Një urdhër i rastit zgjeron së pari fjalën dhe përpiqet që të përputhet me çdo model , duke përdorur të njëjtat rregulla përputhëse si për zgjerimin e shtegut (shih zgjerimin e Pathname më poshtë). Kur të gjendet një ndeshje, lista përkatëse ekzekutohet. Pas ndeshjes së parë, asnjë ndeshje pasuese nuk tentohet. Statusi i daljes është zero nëse asnjë model nuk përputhet. Përndryshe, është statusi i daljes së komandës së fundit të ekzekutuar në listë .

nëse lista ; pastaj lista; [ lista elif ; pastaj lista ; ] ... [ tjetër listë ; ] fi

Nëse lista ekzekutohet. Nëse statusi i daljes është zero, atëherë lista ekzekutohet. Përndryshe, çdo listë elif ekzekutohet nga ana e tij, dhe nëse statusi i daljes së tij është zero, atëherë lista përkatëse ekzekutohet dhe komanda përfundon. Përndryshe, lista tjetër ekzekutohet, nëse është e pranishme. Statusi i daljes është statusi i daljes së komandës së fundit të ekzekutuar, ose zero nëse asnjë kusht i testuar nuk është i vërtetë.

ndërsa lista ; bëj listën ; e bërë

deri në listën ; bëj listën ; e bërë

Ndërkohë që komanda vazhdimisht ekzekuton listën e listave për aq kohë sa komanda e fundit në listë kthen statusin e daljes prej zero. Komanda derisa është identike me komandën e kohës , përveç se testimi mohohet; lista e listës ekzekutohet për aq kohë sa komanda e fundit në listë kthen statusin e daljes jo-zero. Statusi i daljes së derisa dhe derisa komandat është statusi i daljes së komandës së fundit të listës së ekzekutuar, ose zero nëse asnjë nuk është ekzekutuar.

[ funksion ] emri () { lista ; }

Kjo përcakton një funksion me emër të emëruar. Trupi i funksionit është lista e komandave midis {and}. Kjo listë ekzekutohet sa herë që emri është specifikuar si emri i një komande të thjeshtë. Statusi i daljes së një funksioni është statusi i daljes së komandës së fundit të ekzekutuar në trup. (Shih FUNKSIONET më poshtë.)

KOMENTE

Në një shell jointeraktive ose një skedë interaktive në të cilën opsioni interactive_commentsshopt builtin është aktivizuar (shih SHELL BUILTIN COMMANDS më poshtë), një fjalë që fillon me # shkakton atë fjalë dhe të gjithë personazhet e mbetura në atë rresht të injorohen. Një skedë interaktive pa opsionin interactive_comments aktivizuar nuk lejon komentet. Opsioni interactive_comments është aktiv nga default në predha interaktive.

Duke cituar

Quoting është përdorur për të hequr kuptimin e veçantë të karaktereve të caktuara ose fjalë në shell. Quoting mund të përdoret për të çaktivizuar trajtimin e veçantë për karaktere të veçanta, për të parandaluar që fjalët e rezervuara të njihen si të tilla dhe për të parandaluar zgjerimin e parametrave.

Secili prej metakaraktorëve të renditur më lart në DEFINIZIMET ka kuptim të veçantë për shell dhe duhet të citohet nëse duhet të përfaqësojë veten.

Kur përdoren objektet e zgjerimit të historisë së komandës, zakonisht, karakteri i zgjerimit të historisë ! , duhet të citohet për të parandaluar zgjerimin e historisë.

Ekzistojnë tre mekanizma citimi: karakteri i ikjes , kuotat e vetme, dhe kuotat e dyfishta.

Një kthesë prapa ( \ ) jo e cituar është karakteri i ikjes . Ruan vlerën literale të karakterit tjetër që vijon, me përjashtim të . Nëse shfaqet një palë \ , dhe rreshti i kundërt nuk citohet vetë, \ trajtohet si vazhdim i linjës (dmth., Hiqet nga rryma e hyrjes dhe injorohet në mënyrë efektive).

Karakteret e mbylljes në citate të vetme ruan vlerën literale të çdo karakteri brenda kuotave. Një kuotë e vetme mund të mos ndodhë midis kuotave të vetme, madje edhe kur paraprihet nga një rresht.

Karakteret e mbylljes në kuotat e dyfishta ruajnë vlerën literale të të gjithë karaktereve brenda kuotave, me përjashtim të $ , ` dhe \ . Karakteret $ dhe ` mbajnë kuptimin e tyre të veçantë brenda kuotave të dyfishta. Kundërshtari mban kuptimin e tij të veçantë vetëm kur ndiqet nga një nga personazhet e mëposhtme: $ , ` , " , \ , ose Një kuotim i dyfishtë mund të citohet brenda kuotave të dyfishta duke e paraprirë atë me një rresht të kundërt.

Parametrat e veçantë * dhe @ kanë kuptim të veçantë kur janë në kuotat e dyfishta (shih PARAMETRAT më poshtë).

Fjalët e formës $ ' string ' trajtohen posaçërisht. Fjala zgjerohet në varg , me shkronja të prapambetura të zëvendësuara si të specifikuara nga standardi ANSI C. Sekuencat e ikjes së shpinës, nëse janë të pranishme, dekodohen si më poshtë:

\ a

alarm (zile)

\ b

Backspace

\ e

një karakter shpëtimi

\ f

formë ushqimi

\ n

linjë e re

\ r

kthim ngarkese

\ t

tab horizontale

\ v

tab vertikale

\\

backslash

\ '

kuotë të vetme

\ nnn

karakteri tetë-bit, vlera e të cilit është vlera oktale nnn (një deri në tre shifra)

\ x HH

karakteri tetë-bit, vlera e të cilit është vlera hexadecimal HH (një ose dy shifra hex)

\ c x

një karakter kontrolli x

Rezultati i zgjeruar është citat i vetëm, sikur shenja e dollarit të mos ishte e pranishme.

Një varg i cituar dy herë përpara një shenje dollari ( $ ) do të bëjë që vargu të përkthehet sipas lokalit aktual. Nëse pozicioni aktual është C ose POSIX , shenja e dollarit injorohet. Nëse teksti është përkthyer dhe zëvendësuar, zëvendësimi citohet me dy fjalë.

PARAMETRAT

Një parametër është një entitet që ruan vlerat. Mund të jetë një emër , një numër ose një nga personazhet speciale të listuara më poshtë nën Parametrat e Veçantë . Për qëllimet e shell, një ndryshore është një parametër me një emër . Një ndryshore ka një vlerë dhe zero ose më shumë atribute . Atributet janë caktuar duke përdorur komandën e deklaruar builtin (shih deklaroj më poshtë në SHELL BUILTIN COMMANDS).

Një parametër është vendosur nëse i është caktuar një vlerë. Vargu null është një vlerë e vlefshme. Sapo të jetë vendosur një variabël, mund të çaktivizohet vetëm duke përdorur komandën e integruar të integruar (shih SHUN BUILTIN COMMANDS më poshtë).

Një ndryshore mund të caktohet nga një deklaratë e formularit

emri = [ vlera ]

Nëse vlera nuk jepet, variabli i është caktuar string null. Të gjitha vlerat i nënshtrohen zgjerimit të tildes, parametrit dhe zgjerimit të ndryshueshëm, zëvendësimit të komandës, zgjerimit aritmetik dhe heqjes së kuotave (shih EXPANSION më poshtë). Nëse variabla ka setin e plotë të atributit, atëherë vlera i nënshtrohet zgjerimit aritmetik edhe nëse zgjerimi $ ((...)) nuk përdoret (shih Zgjerimin aritmetik më poshtë). Ndarja e fjalëve nuk kryhet, me përjashtim të "$ @" siç shpjegohet më poshtë nën Parametrat e Veçantë . Zgjerimi i pathname nuk është kryer. Deklaratat e caktimit gjithashtu mund të paraqiten si argumente për komandat e deklaruara , të llojit , të eksportit , të leximit dhe të ndërtesës lokale .

Parametrat e Pozicionimit

Një parametër pozicionor është një parametër që shënohet me një ose më shumë shifra, përveç shifrës së vetme 0. Parametrat e pozicionit janë caktuar nga argumentet e shell kur ajo thirret dhe mund të ri-përcaktohet duke përdorur komandën e integruar të vendosur . Parametrat e pozicionit nuk mund të caktohen me deklaratat e caktimit. Parametrat e pozicionit zëvendësohen përkohësisht kur kryhet një funksion shell (shih FUNKSIONET më poshtë).

Kur një parametër pozicionimi i përbërë nga më shumë se një shifër të vetme zgjerohet, ajo duhet të jetë e mbyllur në format të dukshme (shih shtrirjen më poshtë).

Parametrat e Veçantë

Shell trajton disa parametra posaçërisht. Këto parametra mund të referohen vetëm; nuk u lejohet caktimi i tyre.

*

Zgjerohet në parametrat e pozicionit, duke filluar nga një. Kur zgjerimi ndodh brenda kuotave të dyfishta, zgjerohet në një fjalë të vetme me vlerën e secilit parametër të ndarë nga karakteri i parë i ndryshores së veçantë të IFS . Kjo është, " $ * " është e barabartë me " $ 1 c $ 2 c ... ", ku c është karakteri i parë i vlerës së ndryshores IFS . Nëse IFS është i pacaktuar, parametrat ndahen nga hapësira. Nëse IFS është i pavlefshëm, parametrat bashkohen pa ndarës ndarës.

@

Zgjerohet në parametrat e pozicionit, duke filluar nga një. Kur zgjerimi ndodh brenda kuotave të dyfishta, çdo parametër zgjerohet në një fjalë të veçantë. Kjo është, " $ @ " është e barabartë me " $ 1 " " $ 2 " ... Kur nuk ka parametra pozicioni, " $ @ " dhe $ @ zgjerohet për asgjë (p.sh., ato hiqen).

#

Zgjeron numrin e parametrave pozicional në decimal.

?

Zgjeron statusin e tubacionit të parë të ekzekutuar më parë.

-

Shtrihet tek flamujt aktualë të opsioneve siç specifikohet pas thirrjes, nga komanda e integruar e vendosur , ose ato të vendosura nga vetë shell (si opsioni -i ).

$

Zgjeron ID-në e procesit të shell. Në një subshell (), ai zgjerohet në ID-në e procesit të shell-it aktual, dhe jo në nën-skemën.

!

Zgjeron ID-në e procesit të komandës së sfondit më të fundit të ekzekutuar (asinkron).

0

Zgjerohet në emrin e skemës shell ose shell. Kjo është vendosur në inicializimin e shell. Nëse bash thirret me një skedar komandash, $ 0 është vendosur në emrin e atij skedari. Nëse bash është nisur me opsionin -c , atëherë $ 0 është vendosur në argumentin e parë pas vargut që do të ekzekutohet, nëse një është i pranishëm. Përndryshe, është vendosur në emrin e skedarit të përdorur për të thirrur bash , siç jepet nga argumenti zero.

_

Në fillimin e skemës, vendosni në emrin absolut të skedarit të skemës shell ose shell të ekzekutuar si të kaluar në listën e argumenteve. Më pas, zgjerohet tek argumenti i fundit në komandën e mëparshme, pas zgjerimit. Vendosni gjithashtu emrin e plotë të skedarit të çdo komande të ekzekutuar dhe vendosur në mjedisin e eksportuar në atë komandë. Kur kontrolloni postën, ky parametër mban emrin e skedarit të postës që po kontrollohet aktualisht.

Variablat Shell

Variablat e mëposhtëm janë vendosur nga shell:

BASH

Zgjeron në emrin e plotë të skedarit të përdorur për të thirrur këtë shembull të bash .

BASH_VERSINFO

Një variabël i grupit të lexuar, anëtarët e të cilit mbajnë informacione mbi versionin për këtë shembull të bash . Vlerat e caktuara për anëtarët e grupit janë si më poshtë:

BASH_VERSINFO [ 0]

Numri i versionit kryesor ( lirimi ).

BASH_VERSINFO [ 1]

Numri i versionit të vogël ( versioni ).

BASH_VERSINFO [ 2]

Niveli i patch-it.

BASH_VERSINFO [ 3]

Versioni i ndërtuar.

BASH_VERSINFO [ 4]

Statusi i lirimit (p.sh., beta1 ).

BASH_VERSINFO [ 5]

Vlera e MTYTYPE .

BASH_VERSION

Zgjeron në një varg që përshkruan versionin e kësaj instance të bash .

COMP_CWORD

COMP_LINE

Linja e komandës aktuale. Kjo variabël është e disponueshme vetëm në funksionet e shell dhe komandat e jashtme të përdorura nga pajisjet e përfundimit të programueshëm (shih Përfundimi i Programueshëm më poshtë).

COMP_POINT

COMP_WORDS

Një variabël array (shih Arrays below) që përbëhet nga fjalët individuale në vijën e komandës aktuale. Kjo variabël është e disponueshme vetëm në funksionet e skedave të përdorura nga pajisjet e përfundimit të programueshëm (shih Përfundimi i Programueshëm në vijim).

DIRSTACK

Një variabël array (shih Arrays below) që përmban përmbajtjen e tanishme të grumbullit të direktorisë. Drejtoritë shfaqen në rafte në mënyrë që ato të shfaqen nga dirs builtin. Caktimi i anëtarëve të këtij variabli array mund të përdoret për të modifikuar direktoritë tashmë në rafte, por pushd dhe popd builtins duhet të përdoren për të shtuar dhe për të hequr drejtoritë. Caktimi në këtë variabël nuk do të ndryshojë dosjen aktuale. Nëse DIRSTACK është i pacaktuar, humbet vetitë e tij të veçanta, edhe nëse rivendoset më pas.

EUID

Zgjeron ID-në efektive të përdoruesit aktual, inicializuar në fillimin e shell. Kjo variabël është e lexueshme.

FUNCNAME

Emri i çdo funksioni shell të ekzekutuar aktualisht. Kjo variabël ekziston vetëm kur ekzekutohet një funksion shell. Detyrat për FUNCNAME nuk kanë efekt dhe nuk kthejnë një status gabimi. Nëse FUNCNAME nuk është i caktuar, humbet vetitë e tij të veçanta, edhe nëse rivendoset më pas.

GRUPET

Një variabël array që përmban listën e grupeve nga të cilat përdoruesi aktual është anëtar. Detyrat për grupet nuk kanë efekt dhe nuk kthehen në një status gabimi. Nëse GRUPET nuk janë caktuar, humbet vetitë e saj të veçanta, edhe nëse rivendoset më pas.

HISTCMD

Numri i historisë, ose indeksi në listën e historisë, të komandës aktuale. Nëse HISTCMD është i pacaktuar, humbet vetitë e tij të veçanta, edhe nëse rivendoset më pas.

HOSTNAME

Vendoseni automatikisht në emër të hostit aktual.

HOSTTYPE

Vendoseni automatikisht në një varg që përshkruan në mënyrë unike llojin e makinës në të cilën bash po ekzekuton. Parazgjedhja varet nga sistemi.

LINENO

Çdo herë që referohet ky parametër, predha zëvendëson një numër dhjetor që përfaqëson numrin vijues vijues (duke filluar me 1) brenda një skript ose funksion. Kur nuk është në një skript apo funksion, vlera e zëvendësuar nuk është e garantuar të jetë kuptimplotë. Nëse LINENO është i pacaktuar, humbet vetitë e tij të veçanta, edhe nëse rivendoset më pas.

MACHTYPE

Caktohet automatikisht në një varg që përshkruan plotësisht llojin e sistemit në të cilin bash po ekzekuton, në formatin standard të sistemit GNU cpu-company-system . Parazgjedhja varet nga sistemi.

OLDPWD

Drejtoria e mëparshme e punës e vendosur nga komanda cd .

OPTARG

Vlera e argumentit të opsionit të fundit të përpunuar nga komanda getopts builtin (shih SHELL BUILTIN COMMANDS më poshtë).

OPTIND

Indeksi i argumentit tjetër që do të përpunohet nga komanda getopts builtin (shih SHELL BUILTIN COMMANDS më poshtë).

OSTYPE

Vendoseni automatikisht në një varg që përshkruan sistemin operativ në të cilin bash po ekzekuton. Parazgjedhja varet nga sistemi.

PIPESTATUS

Një variabël array (shih Arrays below) që përmban një listë të vlerave të statusit të daljes nga proceset në tubacionin më të fundit të ekzekutuar më parë (i cili mund të përmbajë vetëm një komandë të vetme).

PPID

ID e procesit të prindit të guaskës. Kjo variabël është e lexueshme.

PWD

Drejtoria aktuale e punës siç përcaktohet nga komanda cd .

Random

Çdo herë që referohet ky parametër, gjenerohet një numër i plotë i rastësishëm midis 0 dhe 32767. Sekuenca e numrave të rastësishëm mund të inicializohet duke caktuar një vlerë në RANDOM . Nëse RANDOM nuk është i vendosur, ai humbet vetitë e tij të veçanta, edhe nëse është rikthyer më pas.

përgjigjen

Caktohet në linjën e hyrjes të lexuar nga komanda e lexuar builtin kur nuk jepen argumente.

SECONDS

Çdo herë që referohet ky parametër, numri i sekondave nga kthimi i skedarit kthehet. Nëse një vlerë është caktuar në SECONDS , vlera e kthyer me referenca të mëvonshme është numri i sekondave që nga caktimi plus vlera e caktuar. Nëse SECONDS nuk është i vendosur, ai humbet vetitë e tij të veçanta, edhe nëse është riaktivizuar më vonë.

SHELLOPTS

Një listë e ndarë e zjarrit e opsioneve të lejuara të shell. Çdo fjalë në listë është një argument i vlefshëm për opsionin -o në komandën e integruar të ndërtuar (shih SHELL BUILTIN COMMANDS më poshtë). Opsionet që shfaqen në SHELLOPTS janë ato të raportuara si nga set-o . Nëse kjo ndryshore është në mjedis kur bash fillon, secili opsion shell në listë do të aktivizohet para se të lexoni ndonjë fotografi të nisjes. Kjo variabël është e lexueshme.

SHLVL

Rritur nga një herë çdo herë që një shembull i bash është nisur.

UID

Zgjerohet në ID-në e përdoruesit aktual, inicializuar në fillimin e shell. Kjo variabël është e lexueshme.

Variablat e mëposhtme përdoren nga predha. Në disa raste, bash cakton një vlerë të parazgjedhur në një ndryshore; këto raste janë shënuar më poshtë.

BASH_ENV

Nëse ky parametër është vendosur kur bash po ekzekuton një skriptë shell, vlera e saj interpretohet si një emër filmi që përmban komanda për të inicializuar shell, si në ~ / .bashrc . Vlera e BASH_ENV i nënshtrohet zgjerimit të parametrave, zëvendësimit të komandës dhe zgjerimit aritmetik para se të interpretohet si një emër skedari. PATH nuk përdoret për të kërkuar emrin e skedarit që rezulton.

CDPATH

Rruga e kërkimit për komandën cd . Kjo është një listë me ndarje të zorrës së trashë të drejtorive në të cilat shell duket për drejtoritë e destinacionit të specifikuara nga komanda cd . Një vlerë e mostrës është ".: ~: / Usr".

Columns

Përdoret nga komanda e zgjedhur e ndërtuar për të përcaktuar gjerësinë e terminalit kur listat e përzgjedhjes së printimit. Vendoseni automatikisht pas marrjes së një SIGWINCH.

COMPREPLY

Një variabël array nga e cila bash lexon plotësimet e mundshme të gjeneruara nga një funksion shell të thirrur nga funksioni i programueshëm i përfundimit (shih Përfundimi i Programueshëm më poshtë).

FCEDIT

Redaktuesi i parazgjedhur për komandën fc builtin.

FIGNORE

Një listë e ndarjes së mbishkrimeve të ndara nga zorrës së trashë për t'u injoruar gjatë kryerjes së përfundimit të skedarit (shih READLINE më poshtë). Një emri i të dhënave, praparoja e të cilit përputhet me një prej shënimeve në FIGNORE , përjashtohet nga lista e emrave të skedarëve të përputhshëm. Një vlerë e mostrës është ".o: ~".

GLOBIGNORE

Një listë e ndarjeve me dy pika të modeleve që përcaktojnë skedën e emrave të skedarëve që do të injorohen nga zgjerimi i pathname. Nëse një emër filmi përputhet me një model zgjerimi të shtegut përputhet edhe me një nga modelet në GLOBIGNORE , ajo hiqet nga lista e ndeshjeve.

HISTCONTROL

Nëse vendoset në një vlerë të ignorespace , linjat që fillojnë me një karakter hapësirë nuk futen në listën e historisë. Nëse vendoset në një vlerë të ignoredups , linjat që përputhen me linjën e fundit të historisë nuk futen. Një vlerë e ignoreboth kombinon dy opsionet. Nëse unset, ose nëse vendoset në ndonjë vlerë tjetër nga ato të mësipërme, të gjitha linjat e lexuara nga parser ruhen në listën e historisë, në varësi të vlerës së HISTIGNORE . Funksioni i këtij variabli zëvendësohet nga HISTIGNORE . Linjat e dyta dhe të mëvonshme të një komande të përbërë nga shumë linja nuk testohen dhe shtohen në histori pa marrë parasysh vlerën e HISTCONTROL .

HISTFILE

Emri i skedarit në të cilin historia e komandës është ruajtur (shih HISTORIA më poshtë). Vlera e parazgjedhur është ~ / .bash_history . Nëse unset, historia e komandës nuk ruhet kur del një shell interaktive.

HISTFILESIZE

Numri maksimal i linjave të përmbajtura në skedarin e historisë. Kur kjo variabël është caktuar një vlerë, skedari i historisë është i prerë, nëse është e nevojshme, për të mos përmbajtur më shumë se ky numër rreshta. Vlera e parazgjedhur është 500. Skedari i historisë është prerë edhe në këtë madhësi pasi e ka shkruar atë kur një dalje interaktive del.

HISTIGNORE

Një listë e ndarë e zorrës së trashë e modeleve që përdoren për të vendosur se cilat rreshta komandimi duhet të ruhen në listën e historisë. Secili model është i ankoruar në fillim të vijës dhe duhet të përputhet me vijën e plotë (nuk përfshihet ' * ' nënkuptuar). Çdo model është testuar kundër linjës pasi të jenë aplikuar kontrollet e përcaktuara nga HISTCONTROL . Përveç modelit normal të përputhjes së shell, ` & 'përputhet me vijën e mëparshme të historisë. ` & 'mund të shpëtohet duke përdorur një backslash; rrotullimi i tërthortë largohet përpara se të provohet një ndeshje. Linjat e dyta dhe të mëvonshme të një komande komplekse me shumë rreshta nuk janë testuar dhe shtohen në histori pavarësisht nga vlera e HISTIGNORE .

HISTSIZE

Numri i komandave për t'u kujtuar në historinë e komandës (shih HISTORIA më poshtë). Vlera e parazgjedhur është 500.

HOME

Drejtoria e përdoruesit aktual; argumenti i parazgjedhur për komandën e ndërtuar në cd . Vlera e kësaj variabli përdoret gjithashtu kur kryhet zgjerimi i tildes.

HOSTFILE

Përmban emrin e një skedari në të njëjtin format si / etc / hosts që duhet lexuar kur shell duhet të plotësojë një emër host. Lista e ekzekutimeve të mundshme të hostname mund të ndryshohet ndërsa shell po kandidon; herën tjetër përfundimi i hostname është tentuar pas ndryshimit të vlerës, bash shton përmbajtjen e skedarit të ri në listën ekzistuese. Nëse HOSTFILE është vendosur, por nuk ka vlerë, bash përpiqet të lexojë / etc / hosts për të marrë listën e plotësimeve të mundshme të hostname. Kur HOSTFILE nuk është caktuar, lista e hostname është pastruar.

IFS

Ndarësi i brendshëm i fushës që përdoret për ndarjen e fjalëve pas zgjerimit dhe për ndarjen e vijave në fjalë me komandën e integruar të lexuar . Vlera e parazgjedhur është `` ''.

IGNOREEOF

Kontrollon veprimin e një skeme interaktive në marrjen e një karakteri të EOF si kontribut i vetëm. Nëse vendoset, vlera është numri i karaktereve të njëpasnjëshme EOF që duhet të shtypen si shkronjat e para në një rresht hyrje përpara daljes së bash . Nëse variabla ekziston, por nuk ka vlerë numerike, ose nuk ka vlerë, vlera e parazgjedhur është 10. Nëse nuk ekziston, EOF nënkupton fundin e hyrjes në shell.

INPUTRC

Emri i skedarit për skedarin fillestar të leximit , duke e paracaktuar default ~ / .inputrc (shih READLINE më poshtë).

LANG

Përdoret për të përcaktuar kategorinë locale për cilëndo kategori që nuk është zgjedhur në mënyrë specifike me një ndryshore duke filluar me LC_ .

LC_ALL

Kjo variabël anashkalon vlerën e LANG dhe çdo ndryshore tjetër LC_ që specifikon një kategori vendore.

LC_COLLATE

Kjo variabël përcakton renditjen e renditjes që përdoret kur renditen rezultatet e zgjerimit të pathname dhe përcakton sjelljen e shprehjeve të diapazonit, klasave të ekuivalencës dhe sekuencave të krahasimit brenda zgjerimit të pathname dhe përputhjes së modelit.

LC_CTYPE

Kjo variabël përcakton interpretimin e karaktereve dhe sjelljen e klasave të karakterit brenda zgjerimit të pathname dhe përputhjes së modelit.

LC_MESSAGES

Kjo variabël përcakton vendndodhjen e përdorur për të përkthyer vargjet e dyfishtë të paraprira nga një $ .

LC_NUMERIC

Kjo variabël përcakton kategorinë lokale të përdorur për formatimin e numrit.

LINES

Përdoret me komandën e përzgjedhur të ndërtuar për të përcaktuar gjatësinë e kolonës për listat e përzgjedhjes së printimit. Vendoseni automatikisht pas marrjes së një SIGWINCH.

MAIL

Nëse ky parametër është vendosur në një emër file dhe ndryshorja MAILPATH nuk është vendosur, bash informon përdoruesin për ardhjen e postës në skedarin e specifikuar.

MAILCHECK

Specifikon se sa shpesh (në sekonda) bash kontrollon për postën. Parazgjedhja është 60 sekonda. Kur është koha për të kontrolluar postën, predha e bën këtë përpara se të shfaqet shpejtësia primare. Nëse kjo variabël është e pacaktuar, ose vendoset në një vlerë që nuk është numër më i madh ose i barabartë me zero, skema e çaktivizon kontrollin e postës.

MAILPATH

Lista e ndarjes me dy pika të emrave të skedarëve që duhet kontrolluar për postën. Mesazhi që do të printohet kur mbërrin postë në një skedar të caktuar mund të përcaktohet duke ndarë emrin e skedarit nga mesazhi me një `? '. Kur përdoret në tekstin e mesazhit, $ _ zgjerohet në emrin e dosjes aktuale të postës. shembull:

MAILPATH = '/ var / mail / bfox? "Ju keni postë": ~ / shell-mail? "$ _ Ka postë!"'

Bash jep një vlerë të paracaktuar për këtë variabël, por vendndodhja e skedarëve të përdoruesit të postës që përdor është varur nga sistemi (p.sh., / var / mail / USER ).

OPTERR

Nëse vendoset në vlerën 1, bash tregon mesazhet e gabimeve të gjeneruara nga komanda getopts builtin (shih SHELL BUILTIN COMMANDS më poshtë). OPTERR është inicializuar në 1 çdo herë që thirret shell ose nëse ekzekutohet një skript shell.

RRUGË

Rruga e kërkimit për komandat. Kjo është një listë e ndara nga zorrës së trashë e drejtorive në të cilat shell duket për komandat (shih EXECUTION COMMAND më poshtë). Rruga e paracaktuar varet nga sistemi dhe vendoset nga administratori i cili instalon bash . Një vlerë e përbashkët është `` / usr / gnu / bin: / usr / lokali / bin: / usr / ucb: / bin: / usr / bin :. ''.

POSIXLY_CORRECT

Nëse kjo ndryshore është në mjedis kur fillon bash , shell futet në modalitetin posix përpara leximit të skedarëve të fillimit, sikur opsioni i invokimitpostës ishte furnizuar. Nëse vendoset ndërsa shell po kandidon, bash lejon modalitetin posix , sikur komanda e caktuar -o posix të ishte ekzekutuar.

PROMPT_COMMAND

Nëse vendoset, vlera ekzekutohet si një komandë para se të lëshojë çdo prompt primar.

PS1

Vlera e këtij parametri zgjerohet (shih PROMPTING më poshtë) dhe përdoret si vargu primar i shpejtë. Vlera e parazgjedhur është `` \ s- \ v \ $ ''.

PS2

Vlera e këtij parametri zgjerohet si me PS1 dhe përdoret si vargu i shpejtë sekondar. Parazgjedhja është `` > ''.

PS3

Vlera e këtij parametri përdoret si nxitës për komandën e zgjedhur (shih SHELL GRAMMAR më lart).

PS4

Vlera e këtij parametri zgjerohet si me PS1 dhe vlera shtypet para çdo bash shfaqje komande gjatë një gjurmë ekzekutimi. Karakteri i parë i PS4 përsëritet shumë herë, sipas nevojës, për të treguar nivele të shumëfishta të indirektimit. Parazgjedhja është `` + ''.

TIMEFORMAT

Vlera e këtij parametri përdoret si një varg i formatit që specifikon mënyrën se si duhet të shfaqet informacioni i kohës për tubacionet e parapara me fjalën e rezervuar me kohë . Karakteri % prezanton një sekuencë shpëtimi që zgjerohet në një vlerë kohore ose informacione të tjera. Sekuencat e shpëtimit dhe kuptimet e tyre janë si më poshtë; vija e thonjve nënkupton pjesë opsionale.

%%

Një % literal.

% [ p ] [l] R

Koha e kaluar në sekonda.

% [ p ] [l] U

Numri i sekondave të CPU të shpenzuara në modalitetin e përdoruesit.

% [ p ] [l] S

Numri i sekondave të CPU të shpenzuara në modalitetin e sistemit.

% P

Përqindja e CPU, e llogaritur si (% U +% S) /% R.

P opsionale është një shifër që specifikon saktësinë , numrin e shifrave të pjesshme pas një pike dhjetore. Një vlerë 0 nuk shkakton asnjë pikë dhjetore ose pjesë që do të dalë. Mund të përcaktohet më së shumti tre vende pas pikës dhjetore; vlerat e p më të mëdha se 3 janë ndryshuar në 3. Nëse p nuk është specifikuar, përdoret vlera 3.

L opsionale përcakton një format më të gjatë, përfshirë minuta, të formës MM m SS . FF s. Vlera e p përcakton nëse pjesë është përfshirë apo jo.

Nëse kjo variabël nuk është caktuar, bash vepron sikur të kishte vlerën $ '\ nreal \ t% 3lR \ nuser \ t% 3lU \ nsys% 3lS' . Nëse vlera është e pavlefshme, nuk shfaqet asnjë informacion i orës. Një vijë e re vijuese shtohet kur shfaqet vargu i formatit.

TMOUT

Nëse vendoset në një vlerë më të madhe se zero, TMOUT trajtohet si kohëzgjatja e parazgjedhur për readin builtin. Komanda përzgjedhëse përfundon nëse hyrja nuk arrin pas TMOUT sekonda kur hyrja vjen nga një terminal. Në një shell interaktiv, vlera interpretohet si numri i sekondave që duhet të presin për hyrje pas lëshimit të shpejtë primar. Bash përfundon pas pritjes për atë numër sekondash nëse hyrja nuk arrin.

auto_resume

Kjo variabël kontrollon se si shell ndërvepron me përdoruesin dhe kontrollin e punës. Nëse kjo variabël është vendosur, komandat e thjeshta me fjalë të thjeshta pa përcjellje trajtohen si kandidatë për rifillimin e një pune të ndaluar ekzistuese. Nuk lejohet paqartësi; nëse ka më shumë se një punë që fillon me vargun e shtypur, është zgjedhur puna më e fundit. Emri i një pune të ndaluar, në këtë kontekst, është rreshti i komandës që përdoret për ta filluar. Nëse vendoset në vlerën e saktë , vargu i dhënë duhet të përputhet saktësisht me emrin e një pune të ndaluar; nëse vendoset në nëntring , vargu i furnizuar duhet të përputhet me një substring të emrit të një pune të ndaluar. Vlera e nënstrukturimit siguron funksionalitet analog me %? identifikuesin e punës (shih KONTROLLI I PUNËS më poshtë). Nëse vendoset në ndonjë vlerë tjetër, vargu i dhënë duhet të jetë një prefiks i emrit të një pune të ndaluar; kjo siguron funksionalitet analog me identifikuesin e % të punës.

histchars

Dy ose tre karaktere që kontrollojnë zgjerimin e historisë dhe tokenizimin (shih SHPENZIMIN E HISTORISË më poshtë). Karakteri i parë është karakteri i zgjerimit të historisë , karakteri që sinjalizon fillimin e një zgjerimi të historisë, normalisht ` ! '. Karakteri i dytë është karakteri i zëvendësimit të shpejtë , i cili përdoret si stenografi për rihapjen e komandës së mëparshme të futur, duke zëvendësuar një varg për një tjetër në komandë. Parazgjedhja është ` ^ '. Karakteri i tretë opsional është karakteri që tregon se pjesa e mbetur e vijës është një koment kur gjendet si karakteri i parë i një fjale, normalisht ' # '. Karakteri i komenteve të historisë shkakton zëvendësimin e historisë për t'u anashkaluar për fjalët e mbetura në linjë. Kjo nuk do të thotë që komentuesi i guaskës të trajtojë pjesën tjetër të linjës si një koment.

vargjeve

Bash siguron variabla dimensionesh njëdimensionale. Çdo ndryshore mund të përdoret si një grup; Deklaroni builtin do të deklarojë në mënyrë eksplicite një grup. Nuk ka kufizim maksimal për madhësinë e një koleksioni, as ndonjë kërkesë që anëtarët të indeksohen ose të caktohen në mënyrë të pandërprerë. Formatet janë indeksuar duke përdorur numra të plotë dhe janë zero.

Një varg krijohet automatikisht nëse ndonjë variabël është caktuar për përdorimin e emrit të sintaksës [ indeksi ] = vlera . Nënshkruesi trajtohet si një shprehje aritmetike që duhet të vlerësojë me një numër më të madh ose të barabartë me zero. Për të deklaruar në mënyrë eksplicite një grup, përdoreni deklaroni një emër (shih SHELL BUILTIN COMMANDS më poshtë). deklarohet një emër [ nënkript ] gjithashtu pranohet; subscript është injoruar. Atributet mund të specifikohen për një variabël array duke përdorur deklaratat dhe ndërtuar vetëm për leximin. Secili atribut zbatohet për të gjithë anëtarët e një grupi.

Arrays janë caktuar për të përdorur caktimet kompleks të emrit formë = ( vlera 1 ... vlera n ) , ku secila vlerë është e formës [ subscript ] = string . Kërkohet vetëm vargu . Nëse kllapat opsionale dhe subscript janë dhënë, ai indeks është caktuar; përndryshe indeksi i elementit të caktuar është indeksi i fundit i caktuar nga deklarata plus një. Indeksimi fillon në zero. Kjo sintaksë pranohet edhe nga deklarata builtin. Elementet e grupit individual mund të caktohen për përdorimin e emrit [ subscript ] = sintaksë e vlerës së paraqitur më sipër.

Ndërtesa e pacaktuar përdoret për të shkatërruar vargjet. unset name [ subscript ] shkatërron elementin e rendit në indeksin e indeksit. unset name , ku emri është një grup, ose unset name [ subscript ], ku indeksi është * ose @ , largon tërë grupin.

Deklarojnë , lokale , dhe readonly builtins secili pranon një opsion -a për të specifikuar një grup. Ndërtesa e lexuar pranon një opsion -a për të caktuar një listë të fjalëve të lexuara nga hyrja standarde në një grup. Set dhe deklarojnë builtins shfaq vlerat array në një mënyrë që u lejon atyre që të ripërdoren si detyra.

ZGJERIMI

Zgjerimi kryhet në rreshtin e komandës pasi ajo është ndarë në fjalë. Ekzistojnë shtatë lloje zgjerimi: zgjerimi i zgjerimit , zgjerimi i tildes , parametri dhe zgjerimi i ndryshueshëm , zëvendësimi i komandës , zgjerimi aritmetik , ndarja e fjalëve dhe shtrirja e shtegut .

Rendi i shtrirjes është: zgjerimi i zgjerimit, zgjerimi i tildes, parametri, zgjerimi i ndryshueshëm dhe aritmetik dhe zëvendësimi i komandës (bëhet në mënyrë të majtë në të djathtë), ndarja e fjalëve dhe shtrirja e shtegut.

Për sistemet që mund ta mbështesin, ekziston një zgjerim shtesë në dispozicion: zëvendësimi i procesit .

Zgjerimi i Brace

Zgjerimi i shtyllave është një mekanizëm me anë të të cilit mund të krijohen vargje arbitrare. Ky mekanizëm është i ngjashëm me zgjerimin e pathname , por emrat e skedave të krijuara nuk kanë nevojë të ekzistojnë. Modelet që do të zgjerohen, marrin formën e një preambulje opsionale, e ndjekur nga një varg i vargjeve të ndara me presje midis një palë mbathje, e ndjekur nga një postscript opsional. Preambula është prefiksuar për secilën varg që gjendet brenda mbërthimeve, dhe postscripti shtohet në çdo varg që rezulton, duke u zgjeruar nga e majta në të djathtë.

Shtrirja e shtyllave mund të mbivendoset. Rezultatet e secilës varg të zgjeruar nuk janë të renditura; është ruajtur rregulli i majtë në të djathtë. Për shembull, një { d, c, b } e zgjerohet në 'ade ace abe'.

Zgjerimi i shtyllave kryhet para çdo zgjerimi tjetër dhe çdo karakter i veçantë për zgjerimet e tjera ruhet në rezultat. Është rreptësisht tekstuale. Bash nuk zbaton ndonjë interpretim sintatik në kontekstin e zgjerimit ose tekstit midis mbërthimeve.

Ky konstrukt përdoret zakonisht si stenografi kur prefikti i përbashkët i vargjeve që do të gjenerohen është më i gjatë se në shembullin e mësipërm:

mkdir / usr / local / src / bash / {i vjetër, i ri, dist, bugs}

ose

chown rrënjë /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex)}

Zgjerimi brace paraqet një papajtueshmëri të vogël me versionet historike të sh . sh nuk trajton mbylljen e hapjes ose mbylljes posaçërisht kur shfaqen si pjesë e një fjale dhe i ruan ato në dalje. Bash heq braces nga fjalët si pasojë e zgjerimit brace. Për shembull, një fjalë e futur në sh si file {1,2} shfaqet identikisht në dalje. E njëjta fjalë është prodhimi si file1 file2 pas zgjerimit nga bash . Nëse kërkohet pajtueshmëria e rreptë me sh , filloni bash me opsionin + B ose çaktivizoni zgjerimin e shtrëngimit me opsionin + B në komandën e caktuar (shih SHANDIN BUILTIN COMMANDS më poshtë).

Zgjerimi i tildes

Nëse një fjalë fillon me një karakter tilde pa titull (` ~ '), të gjithë personazhet që i paraprijnë prerjes së parë të pa-kuotuar (ose të gjithë personazhet, nëse nuk ka asnjë prerje të pakalueshme) konsiderohen si një prefiks tilde . Nëse asnjë prej personave në prefiksin e tildit nuk është cituar, personazhet në prefiksin e tildit pas tildës trajtohen si një emër identifikimi të mundshëm. Nëse ky emër identifikimi është vargu null, tilda zëvendësohet me vlerën e parametrit të skedarit HOME . Nëse HOME nuk është e vendosur, në vend të saj zëvendësohet direktoria e përdoruesit që ekzekuton shellin. Përndryshe, prefiksi i tildit zëvendësohet me direktorinë në shtëpi që lidhet me emrin e identifikimit të specifikuar.

Nëse tilda-prefiks është një `~ + ', vlera e ndryshores shell PWD zëvendëson tildën-prefiksin. Nëse tilda-prefiks është një `~ - ', vlera e OLDPWD variabla shell, nëse është vendosur, është zëvendësuar. Nëse shkronjat që pasojnë tildën në prefiksin e tildit përbëhen nga një numër N , i prefiksuar paraprakisht nga një '+' ose një `- ', prefixja e tilde zëvendësohet me elementin përkatës nga rafti i direktorisë, ashtu siç do të shfaqet nga dirs builtin thirrur me tilde-prefix si një argument. Nëse karakteret që ndjekin tildën në prefiksin e tildit përbëhen nga një numër pa një '+' ose `- ',` +' është supozuar.

Nëse emri i identifikimit është i pavlefshëm, ose zgjerimi i tildes dështon, fjala është e pandryshuar.

Secili caktim i ndryshorit kontrollohet për prefikset tilde të padeklaruara menjëherë pas një : ose = . Në këto raste, kryhet edhe zgjerimi i tildit. Rrjedhimisht, mund të përdoren emrat e skedarëve me tilde në detyra në PATH , MAILPATH dhe CDPATH dhe shell jep një vlerë të zgjeruar.

Zgjerimi i parametrave

Karakteri ' $ ' paraqet zgjerimin e parametrave, zëvendësimin e komandave, ose zgjerimin aritmetik. Emri i parametrit ose simboli që do të zgjerohet mund të jetë i mbyllur në formatimin e teksteve, të cilat janë opsionale, por shërbejnë për të mbrojtur variablën që zgjerohet nga personazhet që menjëherë pasojnë atë që mund të interpretohet si pjesë e emrit.

Kur përdoren braces, mbajtësja e përputhjes përfundimtare është e para që nuk iku nga një rresht ose brenda një vargu të cituar, dhe jo brenda një zgjerimi aritmetik të ngulitur, zëvendësimit të komandave ose zgjerimit të parametrave.

Vlera e parametrit zëvendësohet. Braceset janë të nevojshme kur parametri është një parametër pozicionor me më shumë se një shifër, ose kur parametri ndiqet nga një karakter që nuk duhet të interpretohet si pjesë e emrit të tij.

Në secilin nga rastet më poshtë, fjala është subjekt i zgjerimit të tildeve, zgjerimit të parametrave, zëvendësimit të komandës dhe zgjerimit aritmetik. Kur nuk kryen zgjerimin e nënstringut, testet bash për një parametër që është i pandryshuar ose null; largimi i zorrës së trashë rezulton në një test vetëm për një parametër që nuk është i caktuar.

Përdorni vlerat e paracaktuara . Nëse parametri është i pacaktuar ose zero, zgjerimi i fjalës zëvendësohet. Përndryshe, vlera e parametrit zëvendësohet.

Cakto vlerat e paracaktuara . Nëse parametri është i pacaktuar ose i pavlefshëm, zgjerimi i fjalës i caktohet parametrit . Vlera e parametrit zëvendësohet më pas. Në këtë mënyrë nuk mund të caktohen parametrat e pozicionit dhe parametrat e veçantë.

Gabim në ekran nëse Null ose Unset . Nëse parametri është i pavlefshëm ose i pacaktuar, zgjerimi i fjalës (ose një mesazh për atë efekt nëse nuk është fjala ) është shkruar në gabimin standard dhe shell, nëse nuk është interaktive, daljet. Përndryshe, vlera e parametrit zëvendësohet.

Përdorni vlerën alternative . Nëse parametri është i pavlefshëm ose jo, asgjë nuk zëvendësohet, përndryshe zgjerimi i fjalës zëvendësohet.

Zgjeron emrat e variablave emrat e të cilëve fillojnë me prefiksin , të ndara nga karakteri i parë i variablave të posaçme IFS .

Zgjatja e gjatësisë në karaktere të vlerës së parametrit . Nëse parametri është * ose @ , vlera e zëvendësuar është numri i parametrave pozicionues. Nëse parametri është një emër array nënvizuar nga * ose @ , vlera e zëvendësuar është numri i elementëve në array.

Fjala zgjerohet për të prodhuar një model ashtu si në zgjerimin e pathname. Nëse modeli përputhet me fillimin e vlerës së parametrit , atëherë rezultati i zgjerimit është vlera e zgjeruar e parametrit me modelin më të shkurtër të përputhjes (rasti `` # '') ose modeli më i gjatë i përputhjes (`` ## ' 'rast) fshihet. Nëse parametri është @ ose * , operacioni i heqjes së modelit aplikohet në çdo parametër pozicionues nga ana e tij, dhe zgjerimi është lista rezultante. Nëse parametri është një variabël array nënvizuar me @ ose * , operacioni i heqjes së modelit zbatohet për secilin anëtar të grupit nga ana tjetër, dhe zgjerimi është lista rezultante.

Fjala zgjerohet për të prodhuar një model ashtu si në zgjerimin e pathname. Nëse modeli përputhet me një pjesë mbrapa të vlerës së zgjeruar të parametrit , atëherë rezultati i zgjerimit është vlera e zgjeruar e parametrit me modelin më të shkurtër të përputhjes (rasti `` % '') ose modeli më i gjatë i përputhjes (`` % % '' rast) fshihet. Nëse parametri është @ ose * , operacioni i heqjes së modelit aplikohet në çdo parametër pozicionues nga ana e tij, dhe zgjerimi është lista rezultante. Nëse parametri është një variabël array nënvizuar me @ ose * , operacioni i heqjes së modelit zbatohet për secilin anëtar të grupit nga ana tjetër, dhe zgjerimi është lista rezultante.

Modeli zgjerohet për të prodhuar një model ashtu si në zgjerimin e pathname. Parametri zgjerohet dhe ndeshja më e gjatë e modelit kundër vlerës së saj zëvendësohet me vargun . Në formën e parë, vetëm ndeshja e parë zëvendësohet. Forma e dytë shkakton të gjitha ndeshje të modelit të zëvendësohen me vargun . Nëse modeli fillon me # , duhet të përputhet në fillim të vlerës së zgjeruar të parametrit . Nëse modeli fillon me % , duhet të përputhet në fund të vlerës së zgjatur të parametrit . Nëse vargu është i pavlefshëm, grumbullimet e modelit fshihen dhe modeli i mëposhtëm mund të hiqet. Nëse parametri është @ ose * , operacioni i zëvendësimit zbatohet për çdo parametër pozicionues nga ana tjetër, dhe zgjerimi është lista rezultante. Nëse parametri është një variabël array nënvizuar me @ ose * , operacioni i zëvendësimit zbatohet për secilin anëtar të grupit nga ana tjetër, dhe zgjerimi është lista rezultante.

Zëvendësimi i komandës

Zëvendësimi i komandës lejon nxjerrjen e një komande për të zëvendësuar emrin e komandës. Ka dy forma:

$ ( komandë )

ose

` urdhër '

Bash kryen zgjerimin duke ekzekutuar komandën dhe duke zëvendësuar zëvendësimin e komandës me outputin standard të komandës, me çdo grilë të zvarritur të fshirë. Linjat e reja të ngulitura nuk fshihen, por ato mund të hiqen gjatë ndarjes së fjalëve. Zëvendësimi i komandës $ (cat file ) mund të zëvendësohet me ekuivalentin, por me shpejtësi $ (< file ).

Kur përdoret forma e zëvendësimit të stilit të vjetër të stilit, zëvendësimi i shpinës mban kuptimin e tij të drejtpërdrejtë përveçse kur përcillet nga $ , ` ose \ . Çiftëzimi i parë që nuk paraprihet nga një kthesë e kundërt përfundon zëvendësimin e komandës. Kur përdorni formën $ ( command ), të gjithë personazhet midis kllapave përbëjnë komandën; asnjëra nuk trajtohet posaçërisht.

Zëvendësimet e komandës mund të mbivendosen. Për të fole kur përdorni formën e kurorëzuar, shpëtojeni kurrizin e brendshëm me rrotullime prapa.

Nëse zëvendësimi shfaqet brenda kuotave të dyfishta, ndarja e fjalëve dhe shtrirja e shtegut nuk kryhen në rezultatet.

Zgjerimi aritmetik

Zgjerimi aritmetik lejon vlerësimin e një shprehje aritmetike dhe zëvendësimin e rezultatit. Formati për zgjerimin aritmetik është:

$ (( shprehje ))

Shprehja trajtohet sikur të ishte brenda kuotave të dyfishta, por një kuotë e dyfishtë brenda kllapave nuk trajtohet posaçërisht. Të gjitha argumentet në shprehje i nënshtrohen zgjerimit të parametrave, zgjerimit të vargut, zëvendësimit të komandave dhe heqjes së kuotave. Zëvendësimet aritmetike mund të mbivendosen.

Vlerësimi kryhet sipas rregullave të renditura më poshtë në VLERËSIM ARITMETIK . Nëse shprehja është e pavlefshme, bash printon një mesazh që tregon dështimin dhe nuk ndodh zëvendësim.

Zëvendësimi i Procesit

Zëvendësimi i procesit mbështetet në sistemet që mbështesin tubacionet me emrin ( FIFOs ) ose metodën / dev / fd të emërtimit të skedarëve të hapur. Ajo merr formën e <( list ) ose > ( listë ) . Lista e proceseve është e drejtuar me hyrjen ose daljen e saj të lidhur me një FIFO ose disa skedarë në / dev / fd . Emri i këtij skedari kalon si argument për komandën e tanishme si rezultat i zgjerimit. Nëse përdoret forma > ( listë ) , shkrimi në skedar do të japë të dhëna për listën . Nëse përdoret forma <( lista ) , skedari i kaluar si një argument duhet lexuar për të marrë daljen e listës .

Kur është e mundur, zëvendësimi i procesit kryhet në të njëjtën kohë me parametrat dhe zgjerimin e ndryshueshëm, zëvendësimin e komandës dhe zgjerimin aritmetik.

Ndarjen e Fjalës

Shell skanon rezultatet e zgjerimit të parametrave, zëvendësimit të komandës dhe zgjerimit aritmetik që nuk ndodhi brenda kuotave të dyfishta për ndarjen e fjalëve .

Shell trajton çdo karakter të IFS si një delimiter, dhe ndan rezultatet e zgjerimeve të tjera në fjalë mbi këto karaktere. Nëse IFS është i pacaktuar, ose vlera e tij është saktësisht , default, atëherë çdo sekuencë e karaktereve IFS shërben për të përcaktuar fjalët. Nëse IFS ka një vlerë të ndryshme nga default, atëherë sekuencat e hapësirës së hapësirës së hapësirës së bardhë dhe tab janë injoruar në fillim dhe në fund të fjalës, për sa kohë që karakteri i hapësirës së bardhë është në vlerën e IFS (një karakter hapësinor IFS ). Çdo karakter në IFS që nuk është IFS hapësirë ​​e bardhë, së bashku me çdo karakter të ngjitur IFS whitespace, delimiton një fushë. Një sekuencë e karaktereve IFS whitespace trajtohet gjithashtu si një delimiter. Nëse vlera e IFS është zero, nuk ka ndarje të fjalëve.

Argumentet eksplicite null ( "" ose "" ) mbahen. Argumentet e pavlefshme të pavlefshme null, që rezultojnë nga zgjerimi i parametrave që nuk kanë vlera, hiqen. Nëse një parametër pa vlera zgjerohet brenda kuotave të dyfishta, rezulton dhe mbrohet një argument i pavlefshëm.

Vini re se nëse nuk ndodh ndonjë zgjerim, nuk kryhet ndarja.

Zgjerimi i Pathname

Pas ndarjes së fjalëve, nëse nuk është caktuar opcioni -f , bash skanon çdo fjalë për shkronjat * ,? , dhe [ . Nëse shfaqet një nga këto karaktere, atëherë fjala konsiderohet si një model dhe zëvendësohet me një listë të renditur sipas rendit alfabetik të emrave të skedarëve që përputhen me modelin. Nëse nuk gjinden emra të përputhshëm të skedarëve dhe opsioni i skedarit nullglob është i çaktivizuar, fjala mbetet e pandryshuar. Nëse opsioni nullglob është vendosur dhe nuk ka ndeshje, fjala është hequr. Nëse opsioni shell nocaseglob është aktivizuar, ndeshja kryhet pa marrë parasysh rastin e karaktereve alfabetike. Kur një model përdoret për zgjerimin e pathname, karakteri ``. '' Në fillim të një emri ose menjëherë pas një slash duhet të përputhet në mënyrë eksplicite, përveç nëse opsioni shell shell dotglob është vendosur. Kur përputhet me një emër të rrugës, karakteri i prerjes duhet gjithmonë të përputhet në mënyrë eksplicite. Në raste të tjera, karakteri ``. '' Nuk trajtohet posaçërisht. Shihni përshkrimin e shopt më poshtë nën SHELL BUILTIN COMMANDS për një përshkrim të opsioneve shell , nullglob , dhe dotglob .

GLOBIGNORE shell variable mund të përdoret për të kufizuar grupin e emrave të skedarëve që përputhen me një model . Nëse GLOBIGNORE është vendosur, çdo emër i përputhshëm i skedarit që përputhet edhe me një nga modelet në GLOBIGNORE hiqet nga lista e ndeshjeve. Emrat e skedarëve ``. '' Dhe `` .. '' janë injoruar gjithmonë, madje edhe kur GLOBIGNORE është vendosur. Megjithatë, vendosja e GLOBIGNORE ka efektin e mundësimit të opsionit shell dotglob , kështu që të gjithë emrat e skedarëve të tjerë duke filluar me një ``. '' Do të përputhen. Për të marrë sjelljen e vjetër të injorimit të emrave të skedarëve duke filluar me një ``. '' , Bëjeni ``. * '' Një nga modelet në GLOBIGNORE . Opsioni dotglob është i çaktivizuar kur GLOBIGNORE nuk është i caktuar.

Përputhja e modelit

Çdo karakter që shfaqet në një model, përveç shenjave të modelit të posaçëm të përshkruar më poshtë, përputhet vetë. Karakteri NUL nuk mund të ndodhë në një model. Karakteret e modelit të veçantë duhet të citohen nëse ato duhet të përputhen fjalë për fjalë.

Karakteret e modelit të posaçëm kanë këto kuptime:

*

Përputhet me çdo varg, duke përfshirë edhe vargun null.

?

Përputhet me çdo karakter të vetëm.

[...]

Përputhet me ndonjë nga personazhet e mbyllura. Një palë e shkronjave të ndara nga një vizë ndarëse nënkupton një shprehje varg ; çdo karakter që renditet midis atyre dy karaktereve, përfshirëse, duke përdorur sekuencën e renditjes së tanishme dhe grupin e karaktereve, përputhet. Nëse karakteri i parë pas [ është a ! ose një ^ atëherë çdo karakter që nuk është i mbyllur përputhet. Rendi i renditjes së karaktereve në shprehjet e diapazit përcaktohet nga gjendja aktuale dhe vlera e ndryshores shell të LC_COLLATE , nëse është vendosur. A - mund të përputhet duke e përfshirë atë si personazhi i parë ose i fundit në grup. A ] mund të përputhen duke e përfshirë atë si personazhi i parë në grup.

Brenda [ dhe ] , klasat e karaktereve mund të specifikohen duke përdorur sintaksën [: class :] , ku klasa është një nga klasa e mëposhtme e përcaktuar në standardin POSIX.2:

alnum alfa ascii bosh cntrl shifra grafiku më e ulët print punct hapësirë ​​fjalën e sipërme xdigit
Një klasë e karaktereve përputhet me çdo karakter që i përket asaj klase. Fjala klasë e karaktereve përputhet me letra, shifra dhe karakterin _.

Brenda [ dhe ] , një klasë ekuivalence mund të specifikohet duke përdorur sintaksën [= c =] , e cila përputhet me të gjithë personazhet me të njëjtën peshë bashkimi (siç përcaktohet nga locale aktuale) si karakteri c .

Brenda [ dhe ] , sintaksa [. simbol .] përputhet me simbolin e simbolit të mbledhjes.

Nëse opsioni shell shell extglob është aktivizuar duke përdorur shopt builtin, disa operatorë të zgjerimit të modelit të zgjeruar njihen. Në përshkrimin e mëposhtëm, një listë modelesh është një listë e një ose më shumë modeleve të ndara nga një | . Format e përbëra mund të formohen duke përdorur një ose më shumë nga nën-modelet e mëposhtme:

? ( model-lista )

Përputhet me zero ose një shfaqje të modeleve të dhëna

* ( model-lista )

Përputhet me zero ose më shumë ndodhi të modeleve të dhëna

+ ( model-lista )

Përputhet me një ose më shumë dukuri të modeleve të dhëna

@ ( model-lista )

Përputhet saktësisht me një nga modelet e dhëna

! ( model-lista )

Përputhet me çdo gjë përveç një prej modeleve të dhënë

Shkarkimi i caktimit

Pas zgjerimeve të mësipërme, të gjitha dukuritë e pakryera të karaktereve \ , ' dhe " që nuk rezultojnë nga një nga zgjerimet e mësipërme hiqen.

RIDREJTIMI

Para se të ekzekutohet një komandë, hyrja dhe dalja e tij mund të ridrejtohen duke përdorur një notacion të veçantë të interpretuar nga predha. Redirection gjithashtu mund të përdoret për të hapur dhe mbyllur skedarët për mjedisin e ekzekutimit shell shell. Operatorët e mëposhtëm të ridrejtimit mund t'i paraprijnë ose shfaqen kudo brenda një komande të thjeshtë ose mund të ndjekin një komandë . Redirections janë përpunuar në mënyrë që ata të shfaqen, nga e majta në të djathtë.

Në përshkrimet e mëposhtme, nëse numri i përshkruesve të skedarëve është lënë jashtë dhe karakteri i parë i operatorit të ridrejtimit është < , referimi i referohet hyrjes standarde (file descriptor 0). Nëse karakteri i parë i operatorit të ridrejtimit është > , përcjellja i referohet prodhimit standard (file descriptor 1).

Fjala pas operatorit të ridrejtimit në përshkrimet e mëposhtme, nëse nuk shprehet ndryshe, i nënshtrohet zgjerimit të zgjerimit, zgjerimit tilde, zgjerimit të parametrave, zëvendësimit të komandës, zgjerimit aritmetik, heqjes së kuotës, zgjerimit të shtegut dhe ndarjes së fjale. Nëse zgjerohet në më shumë se një fjalë, bash raporton një gabim.

Vini re se rendi i redireksioneve është i rëndësishëm. Për shembull, komanda

ls > dirlist 2 > & 1

drejton si output standarde ashtu edhe gabim standard në dirlist file, ndërsa komanda

Është 2 > & 1 > dirlist

drejton vetëm daljen standarde të file dirlist , për shkak se gabimi standard ishte dublikuar si prodhim standard përpara se prodhimi standard të ridrejtohej në dirlist .

Bash trajton disa filenames posaçërisht kur ato përdoren në redirections, siç përshkruhet në tabelën e mëposhtme:

/ dev / fd / fd

Nëse fd është një numër i plotë i vlefshëm, descriptor file fd është dublikuar.

/ dev / STDIN

Përshkruesi i skedarit 0 kopjohet.

/ dev / Syswrite

Përshkruesi i skedarit 1 është kopjuar.

/ dev / stderr

Përshkrimi i skedarit 2 është dyfishuar.

/ dev / tcp / host / port

Nëse host është një emër i vlefshëm i hostit ose një adresë interneti, dhe porti është një numër i numrit të numrit të plotë ose emrit të shërbimit, bash përpiqet të hapë një lidhje TCP me prizën korresponduese.

/ dev / udp / host / port

Nëse host është një emër i vlefshëm i hostit ose një adresë interneti, dhe porti është një numër i numrit të numrit të plotë ose emri i shërbimit, bash përpiqet të hapë një lidhje UDP me prizën përkatëse.

Dështimi për të hapur ose krijuar një skedar shkakton që ridrejtimi të dështojë.

Përcjellja e hyrjes

Redirection of input shkakton skedarin emri i të cilit rezulton nga zgjerimi i fjalës për t'u hapur për lexim në skedarin e skedarit n , ose hyrja standarde (file descriptor 0) nëse n nuk është specifikuar.

Formati i përgjithshëm për përcjelljen e të dhënave është:

[ n ] < fjalë

Përcjellja e Produktit

Redirection of output shkakton skedarin emri i të cilit rezulton nga zgjerimi i fjalës për t'u hapur për shkrim në përshkrues të skedarit n , ose prodhimi standard (skedari përshkrues 1) nëse n nuk është specifikuar. Nëse skedari nuk ekziston ajo është krijuar; nëse ekziston ai është prerë në madhësi zero.

Formati i përgjithshëm për ridrejtimin e prodhimit është:

[ n ] > fjalë

Nëse operatori i ridrejtimit është > dhe opsioni noclobber i integruar i vendosur është aktivizuar, ridrejtimi do të dështojë nëse skedari emri i të cilit rezulton nga zgjerimi i fjalës ekziston dhe është një skedar i rregullt. Nëse operatori i ridrejtimit është > | , ose operatori i ridrejtimit është > dhe opsioni noclobber për komandën e integruarvendosur nuk është i aktivizuar, ridrejtimi është tentuar edhe nëse ekziston skedari i emëruar me fjalë .

Shtimi i prodhimit të ridrejtuar

Redirection of output në këtë mënyrë shkakton skedarin emri i të cilit rezulton nga zgjerimi i fjalës për t'u hapur për të shtuar në përshkrues të skedarit n , ose prodhimi standard (skedari përshkrues 1) nëse n nuk është specifikuar. Nëse skedari nuk ekziston, ajo krijohet.

Formati i përgjithshëm për nxjerrjen e produktit është:

[ n ] >> fjalë

Përcjellja e rezultatit standard dhe gabimi standard

Bash lejon që të dy output-i standard (file descriptor 1) dhe output standard error (file descriptor 2) të ridrejtohen në skedar emri i të cilit është zgjerimi i fjalës me këtë konstrukt.

Ekzistojnë dy formate për përcjelljen e prodhimit standard dhe gabimit standard:

&> fjalë

dhe

> dhe fjalë

Nga të dy format, e para është e preferuar. Kjo është ekuivalente semantike me

> fjala 2 > & 1

Këtu Dokumentet

Ky lloj i ridrejtimit udhëzon shell për të lexuar hyrjen nga burimi i tanishëm derisa të shihet një vijë që përmban vetëm fjalë (pa boshllëqe zvarritëse). Të gjitha linjat e lexuara deri në atë pikë përdoren më pas si hyrje standarde për një komandë.

Formati i dokumenteve këtu është:

<< [ - ] fjalë këtu- delimiteri i dokumentit

Asnjë zgjerim i parametrave, zëvendësimi i komandës, zgjerimi aritmetik, ose zgjerimi i shtegut nuk kryhet në fjalë . Nëse citohet ndonjë fjalëfjalë , delimiteri është rezultat i heqjes së kuotave në fjalë dhe linjat në dokumentin këtu nuk janë zgjeruar. Nëse fjala është e pa cituar, të gjitha linjat e dokumentit këtu i nënshtrohen zgjerimit të parametrave, zëvendësimit të komandave dhe zgjerimit aritmetik. Në rastin e fundit, sekuenca e karakterit \ është injoruar, dhe \ duhet të përdoret për të cituar karakteret \ , $ dhe ` .

Nëse operatori i ridrejtimit është << - , atëherë të gjithë personazhet kryesore të skedës janë zhveshur nga linjat e hyrjes dhe linja që përmban delimitues . Kjo lejon këtu që dokumentet brenda skripteve të skedave të jenë të prera në mënyrë natyrale.

Këtu Strings

Një variant i dokumenteve këtu, formati është:

<<< fjalë

Fjala zgjerohet dhe furnizohet me komandën në hyrjen e saj standarde.

Përshkrimet e kopjimit të skedarëve

Operatori i ridrejtimit

[ n ] <& fjalë

përdoret për të kopjuar përshkruesit e skedarëve të hyrjes. Nëse fjala zgjerohet në një ose më shumë shifra, përshkruesi i skedarit të shënjuar me n është bërë një kopje e atij skedari të skedarit. Nëse shifrat në fjalë nuk specifikojnë një përshkrues të skedarëve të hapur për futje, ndodh një gabim i ridrejtimit. Nëse fjala vlerëson - , skedari i skedarit n është i mbyllur. Nëse n nuk është specifikuar, përdoret hyrja standarde (file descriptor 0).

Operatori

[ n ] > dhe fjalë

përdoret në mënyrë të ngjashme për të duplikuar përshkruesit e skedarëve të prodhimit. Nëse n nuk është specifikuar, përdoret prodhimi standard (përshkruesi i skedarit 1). Nëse shifrat në fjalë nuk specifikojnë një përshkrues të skedarëve të hapur për dalje, ndodh një gabim i ridrejtimit. Si një rast i veçantë, nëse n është lënë jashtë dhe fjala nuk zgjerohet në një ose më shumë shifra, prodhimi standard dhe gabimi standard janë ridrejtuar siç përshkruhet më parë.

Përshkruesit e dosjeve të lëvizjes

Operatori i ridrejtimit

[ n ] <& shifra -

lëviz shifrën e skedarit të skedarit në skedarin e skedarit n , ose hyrjen standarde (skedari i përshkruesit 0) nëse n nuk është specifikuar. shifror është mbyllur pasi është dublikuar në n .

Në mënyrë të ngjashme, operatori i ridrejtimit

[ n ] > dhe shifra -

lëviz shifrën e skedarit të skedarit në skedarin deskriptor n , ose daljen standarde (skedari përshkrues 1) nëse n nuk është specifikuar.

Hapja e dokumenteve të shkrimit për lexim dhe shkrim

Operatori i ridrejtimit

[ n ] <> fjalë

shkakton skedarin emri i të cilit është zgjerimi i fjalës që duhet të hapet për të dyja lexim dhe shkrim në skedarin e skedarit n , ose në skedarin e përshkruesit 0 nëse n nuk është specifikuar. Nëse skedari nuk ekziston, ajo krijohet.

ALIASES

Nënshkrimet lejojnë që një varg të zëvendësohet me një fjalë kur përdoret si fjala e parë e një komande të thjeshtë. Shell mban një listë të aliases që mund të vendosen dhe unset me komandat alias dhe unalias builtin (shih SHELL BUILTIN COMMANDS më poshtë). Fjala e parë e çdo komande, nëse nuk cilësohet, kontrollohet për të parë nëse ai ka një alias. Nëse po, kjo fjalë zëvendësohet me tekstin e alias. Emri i alias dhe teksti i zëvendësimit mund të përmbajnë çdo hyrje të vlefshme shell, duke përfshirë metakaraktorët e listuar më sipër, me përjashtim se emri i alias nuk mund të përmbajë = . Fjala e parë e tekstit zëvendësues testohet për aliases, por një fjalë që është identike me një alias që zgjerohet nuk zgjerohet për herë të dytë. Kjo do të thotë që dikush mund të jetë alias ls- ls -F , për shembull, dhe bash nuk përpiqet të rekurzivisht të zgjerojë tekstin e zëvendësimit. Nëse karakteri i fundit i vlerës së alias është bosh , atëherë fjala tjetër e komandës pas alias kontrollohet gjithashtu për zgjerimin e alias.

Aliases janë krijuar dhe listuar me komandën alias , dhe janë hequr me komandën unalias .

Nuk ka mekanizëm për përdorimin e argumenteve në tekstin zëvendësues. Nëse nevojiten argumente, duhet të përdoret një funksion shell (shih FUNKSIONET më poshtë).

Aliases nuk janë zgjeruar kur shell nuk është interaktive, përveç nëse opsion shell shell expand_aliases është vendosur duke përdorur shopt (shih përshkrimin e shopt nën SHELL BUILTIN COMMANDS më poshtë).

Rregullat në lidhje me përcaktimin dhe përdorimin e aliases janë disi konfuze. Bash gjithmonë lexon të paktën një linjë të plotë të të dhënave para se të ekzekutojë ndonjë nga komandat në atë rresht. Aliases zgjerohen kur një komandë lexohet, jo kur ekzekutohet. Prandaj, një përkufizim pseudonimi që shfaqet në të njëjtën linjë si një komandë tjetër nuk do të hyjë në fuqi derisa të lexohet linja tjetër e futjes. Komandat pas përcaktimit të alias në atë rresht nuk ndikohen nga alias i ri. Kjo sjellje është gjithashtu një çështje kur funksionet ekzekutohen. Aliases janë zgjeruar kur një përkufizim i funksionit lexohet, jo kur funksioni ekzekutohet, sepse një përkufizim funksioni është vetë një komandë e përbërë. Si pasojë, pseudonimet e përcaktuara në një funksion nuk janë në dispozicion deri pas kryerjes së atij funksioni. Për të qenë i sigurt, gjithmonë vendosni përkufizime alias në një vijë të veçantë dhe mos përdorni alias në komanda të përbërë.

Për pothuajse çdo qëllim, aliases janë zëvendësuar nga funksionet shell.

FUNKSIONE

Një funksion shell, i definuar siç është përshkruar më lart nën SHELL GRAMMAR , përmban një seri komandash për ekzekutimin e mëvonshëm. Kur emri i një funksioni shell përdoret si një emër i thjeshtë i komandës, ekzekutohet lista e komandave që lidhen me emrin e funksionit. Funksionet ekzekutohen në kontekstin e guaskës aktuale; nuk krijohet asnjë proces i ri për t'i interpretuar ato (kjo është e kundërta me ekzekutimin e një skeme shell). Kur ekzekutohet një funksion, argumentet e funksionit bëhen parametra pozicionues gjatë ekzekutimit të tij. Parametri i veçantë # përditësohet për të reflektuar ndryshimin. Parametri i pozicionit 0 është i pandryshuar. FUNCNAME variabile është vendosur në emër të funksionit ndërsa funksioni po ekzekutohet. Të gjitha aspektet e tjera të mjedisit të ekzekutimit të shell janë identike midis një funksioni dhe thirrësit të tij me përjashtim të kurthit DEBUG (shih përshkrimin e kurthit të ngritur nën SHELL BUILTIN COMMANDS më poshtë) nuk trashëgohet, përveç nëse funksionit i është dhënë atributi i gjurmës ( shih përshkrimin e deklaruar builtin më poshtë).

Variablat lokalë të funksionit mund të deklarohen me komandën lokale të ndërtuar. Zakonisht, variablat dhe vlerat e tyre ndahen midis funksionit dhe thirrësit të tij.

Nëse kthimi i komandës ndërtuar kryhet në një funksion, funksioni përfundon dhe ekzekutimi rifillon me komandën e ardhshme pas thirrjes së funksionit. Kur një funksion përfundon, vlerat e parametrave pozicionorë dhe parametri i posaçëm # kthehen në vlerat që kishin para ekzekutimit të funksionit.

Emrat e funksioneve dhe përkufizimet mund të renditen me opsionin -f për deklarimin ose komandat builtin të llojeve . Opsioni -F për të deklaruar ose shkruar do të rendisë vetëm emrat e funksioneve. Funksionet mund të eksportohen në mënyrë që subshells automatikisht t'i kenë ato të përcaktuara me opsion -feksportin builtin.

Funksionet mund të jenë rekursive. Asnjë limit nuk vendoset për numrin e thirrjeve rekurzive.

VLERËSIMI ARITMETIK

Shell lejon shprehjet e aritmetikës të vlerësohen, në rrethana të caktuara (shih le komandën builtin dhe zgjerimin aritmetik ). Vlerësimi bëhet në integers me gjerësi fikse pa kontrolluar për tejmbushjen, edhe pse ndarja me 0 është bllokuar dhe shënuar si gabim. Operatorët dhe përparësia e tyre dhe shoqërueshmëria janë të njëjta si në gjuhën C. Lista e mëposhtme e operatorëve është e grupuar në nivele të operatorëve me prioritet të barabartë. Nivelet janë renditur në mënyrë të përparësisë në rënie.

id ++ id -

ndryshim post-increment dhe post-dekretim

++ id - id

para-increment variabël dhe para-zvogëlimit

- +

unary minus dhe plus

! ~

mohim logjik dhe bit

**

exponentiation

* /%

shumëzimit, ndarjes, pjesës tjetër

+ -

Përveç kësaj, zbritja

<< >>

ndërrime të majtë dhe të djathtë bitwise

<=> = <>

krahasim

==! =

barazi dhe pabarazi

&

bitwise DHE

^

bitwise OSE ekskluzive

|

bitwise OSE

&&

logjike DHE

||

logjik OR

expr ? expr : expr

vlerësim të kushtëzuar

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

detyrë

expr1 , expr2

presje

Ndryshoret e Shellit lejohen si operanda; zgjerimi i parametrave kryhet para se të vlerësohet shprehja. Brenda një shprehje, variablave shell mund të referohen edhe me emër pa përdorur sintaksën e zgjerimit të parametrave. Vlera e një variabli vlerësohet si shprehje aritmetike kur referohet. Një ndryshore e guaskës nuk duhet të ketë cilësinë e plotë të integruar të përdorur për t'u përdorur në një shprehje.

Konstante me një 0 kryesore interpretohen si numra oktal. Një udhëheqës 0x ose 0X tregon heksadecimal. Përndryshe, numrat marrin formën [ base # ] n, ku baza është një numër decimal midis 2 dhe 64 që përfaqëson bazën aritmetike, dhe n është një numër në atë bazë. Nëse baza # është lënë jashtë, atëherë përdoret baza 10. Shifrat më të mëdha se 9 janë të përfaqësuara nga shkronjat e vogla, letrat me shkronja të mëdha, @ dhe _, në atë mënyrë. Nëse baza është më e vogël ose e barabartë me 36, letra të vogla dhe të mëdha mund të përdoren interchangably për të përfaqësuar numrat ndërmjet 10 dhe 35.

Operatorët vlerësohen në mënyrë të përparësisë. Nën-shprehjet në kllapa vlerësohen së pari dhe mund të anashkalojnë rregullat e përparësisë më sipër.

SHPREHJE KUSHTETUESE

Shprehjet e kushtëzuara përdoren nga [ komanda komplekse dhe provë dhe [ komandat builtin për të testuar atributet e skedarëve dhe kryejnë krahasime string dhe aritmetike. Shprehjet formohen nga primaret e mëposhtme unike ose binare. Nëse ndonjë argument i skedarit në një prej primareve është i formës / dev / fd / n , atëherë kontrollohet skedari i skedarit n . Nëse argumenti i skedarit në një nga primaret është një nga / dev / stdin , / dev / stdout , ose / dev / stderr , përkatësisht, përshkruesi i skedarit 0, 1 ose 2, përkatësisht, është i kontrolluar.

një skedar

Vërtetë nëse ekziston skedari .

-b file

Vërtetë nëse ekziston skedari dhe është skedar i veçantë i bllokut.

-c file

Vërtetë nëse ekziston skedari dhe është skedar i veçantë i karakterit.

-d file

Vërtetë nëse ekziston skedari dhe është një direktori.

-e skedar

Vërtetë nëse ekziston skedari .

-f file

Vërtetë nëse ekziston skedari dhe është një skedar i rregullt.

-g file

Vërtetë nëse ekziston skedari dhe është set-group-id.

-h skedar

Vërtetë nëse ekziston skeda dhe është një lidhje simbolike.

-k file

Vërtetë nëse ekziston skedari dhe paketa e tij "ngjitëse" është vendosur.

-p file

E vërtetë nëse ekziston një skedar dhe është një tub me emër (FIFO).

-r file

Vërtetë nëse ekziston skedari dhe është i lexueshëm.

-s file

Vërtetë nëse ekziston një skedar dhe ka një madhësi më të madhe se zero.

-t fd

Vërtetë nëse përshkruesi i skedarit fd është i hapur dhe i referohet një terminali.

-u skedar

Vërtetë nëse ekziston skedari dhe është përcaktuar bit i caktuar i përdoruesit id.

-w file

Vërtetë nëse ekziston një skedar dhe është i shkrueshëm.

-x file

Vërtetë nëse ekziston skedari dhe është i ekzekutueshëm.

-O file

Vërtetë nëse ekziston një skedar dhe është në pronësi të idit efektiv të përdoruesit.

-G file

Vërtetë nëse ekziston një skedar dhe është në pronësi të grupit efektiv id.

-L file

Vërtetë nëse ekziston skeda dhe është një lidhje simbolike.

-S file

Vërtetë nëse ekziston skedari dhe është një fole.

-N- skedar

Vërtetë nëse ekziston skedari dhe është modifikuar pasi që është lexuar së fundmi.

file1 - nt file2

Vërtetë nëse file1 është më i ri (sipas datës së modifikimit) sesa file2 , ose nëse ekziston file1 dhe file2 nuk.

file1 - ot file2

Vërtetë nëse file1 është më i vjetër se file2 , ose nëse ekziston file2 dhe file1 nuk.

file1 -ef file2

Vërtetë nëse file1 dhe file2 i referohen të njëjtës pajisje dhe numrave inode.

-o optname

Vërtetë nëse opsion opsioni opsioni optname është i aktivizuar. Shihni listën e opsioneve nën përshkrimin e opsionit -osetin e ndërtuar më poshtë.

-z string

Vërtetë nëse gjatësia e vargut është zero.

-n string

varg

Vërtetë nëse gjatësia e vargut është jo-zero.

string1 == string2

Vërtetë nëse vargjet janë të barabarta. = mund të përdoret në vend të == për përputhshmëri strikte POSIX.

string1 ! = string2

Vërtetë nëse vargjet nuk janë të barabarta.

string1 < string2

Vërtetë nëse string1 lloj përpara string2 leksikografikisht në locale aktuale.

string1 > string2

Vërtetë nëse string1 renditet pas string2 leksikografikisht në locale aktuale.

arg1 OP arg2

OP është një nga -eq , -ne , -lt , -le , -gt ose -ge . Këta operatorë binar aritmetikë kthehen të vërteta në qoftë se arg1 është e barabartë, jo e barabartë me, më pak se, më pak ose e barabartë, më e madhe se, ose më e madhe ose e barabartë me arg2 . Arg1 dhe arg2 mund të jenë integers pozitiv ose negativ.

Zgjërimi i thjeshtë i komandës

Kur ekzekutohet një komandë e thjeshtë, shell kryen zgjerimet, detyrat dhe përcjelljet e mëposhtme, nga e majta në të djathtë.

1. Fjalët që parser ka shënuar si detyra ndryshueshme (ato që i paraprijnë emrit të komandës) dhe redirections janë ruajtur për përpunim të mëvonshëm.

2. Fjalët që nuk janë detyra ndryshueshme ose ridrejtimet janë zgjeruar. Nëse ndonjë fjalë mbetet pas zgjerimit, fjala e parë merret si emri i komandës dhe fjalët e mbetura janë argumentet.

3.Rirektimet kryhen siç përshkruhet më sipër nën REDIRECTION .

4. Teksti pas = në secilën caktim variabël nënshtrohet zgjerimit të tildes, zgjerimit të parametrave, zëvendësimit të komandës, zgjerimit aritmetik dhe heqjes së kuotës para se të caktohet në variabël.

Nëse nuk del asnjë emër komandimi, caktimet e ndryshueshme ndikojnë në mjedisin e tanishëm të shell. Përndryshe, variablat shtohen në mjedisin e komandës së ekzekutuar dhe nuk ndikojnë në mjedisin e tanishëm të shell. Nëse ndonjë nga detyrat tenton të caktojë një vlerë në një variable të lexuar, ndodh një gabim dhe komanda del me një status jo-zero.

Nëse nuk rezulton asnjë emër i komandës, kryhen ridrejtimet, por nuk ndikojnë në mjedisin e tanishëm të shell. Një gabim redirection shkakton komandën për të dalë me një status jo-zero.

Nëse ka mbetur një emër komandimi pas zgjerimit, ekzekutimi vazhdon siç përshkruhet më poshtë. Përndryshe, komanda del. Nëse një nga zgjerimet përmbante një zëvendësim të komandës, statusi i daljes së komandës është statusi i daljes së zëvendësimit të fundit të komandave të kryera. Nëse nuk ka zëvendësime të komandës, komanda del me një status zero.

EKZEKUTIMI I KOMANDAVE

Pasi një komandë është ndarë në fjalë, nëse rezulton në një komandë të thjeshtë dhe një listë fakultative të argumenteve, ndërmerren veprimet e mëposhtme.

Nëse emri i komandës nuk përmban ulje, shell përpiqet ta gjejë atë. Nëse ekziston një funksion shell me atë emër, ky funksion thirret siç përshkruhet më sipër në FUNKSIONET . Nëse emri nuk përputhet me një funksion, shell e kërkon atë në listën e ndërtuar nga shell. Nëse një ndeshje është gjetur, atë ndërtuar është thirrur.

Nëse emri nuk është as një funksion shell as një ndërtuar dhe nuk përmban ulje, bash kontrollon çdo element të PATH për një direktori që përmban një skedë të ekzekutueshme me atë emër. Bash përdor një tryezë hash për të kujtuar pathnames të plotë të dosjeve të ekzekutueshme (shih hash nën SHELL BUILTIN COMMANDS më poshtë). Një kërkim i plotë i drejtorive në PATH kryhet vetëm nëse komanda nuk gjendet në tabelën e hash. Nëse kërkimi është i pasuksesshëm, shell printon një mesazh gabimi dhe kthen statusin e daljes prej 127.

Nëse kërkimi është i suksesshëm, ose nëse emri i komandës përmban një ose më shumë ulje, shell kryen programin e emëruar në një mjedis ekzekutimi të veçantë. Argumenti 0 është vendosur në emrin e dhënë, dhe argumentet e mbetura për komandën janë vendosur në argumentet e dhëna, nëse ka.

Nëse ky ekzekutim dështon, sepse skedari nuk është në format ekzekutues dhe skedari nuk është një direktori, supozohet të jetë një skriptë shell , një skedar që përmban komandat e shell. Një subshell është pjellë për ta ekzekutuar atë. Ky subhell reinitializes veten, kështu që efekti është sikur një shell të ri ishte thirrur për të trajtuar script, me përjashtim se vendet e komandave kujtohet nga prindi (shih hash më poshtë nën komandat SHELL BUILTIN ) janë ruajtur nga fëmija.

Nëse programi është skedar që fillon me #! , pjesa e mbetur e vijës së parë specifikon një përkthyes për programin. Shembulli ekzekuton interpretuesin e specifikuar në sistemet operative që nuk e trajtojnë vetë këtë format të ekzekutueshëm. Argumentet për përkthyesin përbëhen nga një argument i vetëm opsional pas emrit të përkthyesit në vijën e parë të programit, e ndjekur nga emri i programit, i ndjekur nga argumentet e komandës, nëse ka.

KOMANDA EKZEKUTIMI MJEDISI

Shell ka një mjedis ekzekutimi , i cili përbëhet nga:

* dosjet e hapura trashëguar nga shell në thirrje, të modifikuar nga redirections dhënë për exec builtin

* dosjen aktuale të punës siç përcaktohet nga cd , pushd , ose popd , ose trashëguar nga shell në thirrje

* Maska e modalitetit të krijimit të skedarëve siç është vendosur nga umask ose trashëguar nga prindi i predhës

* kurthet e tanishme të vendosura nga kurthi

* Parametrat shell që janë vendosur nga caktimi i ndryshueshëm ose me grup ose trashëguar nga prindi i shell në mjedis

* funksionet shell të përcaktuara gjatë ekzekutimit ose trashëguar nga prindi i shell në mjedis

* Mundësitë e aktivizuara në thirrje (ose me parazgjedhje ose me argumente të komandës së rreshtit) ose me grup

* opsionet e aktivizuara nga shopt

* Aliases shell definuar me alias

* ID të ndryshme të procesit, duke përfshirë ato të punës së sfondit, vlera e $$ , dhe vlera e $ PPID

Kur një komandë e thjeshtë përveç një funksioni të ndërtuar ose shell duhet të ekzekutohet, thirret në një mjedis ekzekutimi të veçantë që përbëhet nga sa vijon. Nëse nuk shënohet ndryshe, vlerat trashëgohen nga predha.

* dosjet e hapura të shell, plus çdo modifikim dhe shtim të përcaktuar nga redirections në komandë

* drejtoria aktuale e punës

* maskën e krijimit të skedarit

* variabla shell të shënuara për eksport, së bashku me variablat e eksportuara për komandën, kaluan në mjedis

* kurthet e kapura nga shell jane rivendosur ne vlerat e trashëguara nga prindi i shell dhe kurthet e injoruara nga shell jane injoruar

Një komandë e thirrur në këtë mjedis të veçantë nuk mund të ndikojë në mjedisin e ekzekutimit të shell.

Zëvendësimi i komandës dhe komandat asinkrone thirren në një mjedis nëntokësor i cili është një kopje e mjedisit shell, përveç se kurthet e kapura nga shell janë rivendosur në vlerat që shell trashëgoi nga prindi në thirrje. Komandat e ndërtuara që thirren si pjesë e një tubacioni ekzekutohen gjithashtu në një mjedis nëntokësor. Ndryshimet e bëra në mjedisin e nëngrupit nuk mund të ndikojnë në mjedisin e ekzekutimit të shell.

Nëse një komandë ndiqet nga një & dhe kontrolli i punës nuk është aktiv, hyrja standarde e parazgjedhur për komandën është skedari i zbrazët / dev / null . Përndryshe, komanda e thirrur trashëgon përshkruesit e skedarëve të skedarit që thirret si modifikuar nga ridrejtimet.