Bash - ukaz Linux - ukaz Unix

NAME

bash - GNU Bourne-Again SHell

POVZETEK

bash [možnosti] [datoteka]

OPIS

Bash je sh- kompatibilen tolmač za ukazne jezike, ki izvaja ukaze, ki jih berete s standardnega vhoda ali iz datoteke. Bash vključuje tudi uporabne funkcije iz lupine Korn in C ( ksh in csh ).

Bash naj bi bil skladno izvajanje specifikacije IEEE POSIX Shell in Tools (delovna skupina IEEE 1003.2).

OPCIJE

Poleg opcij z enim znakovnim lupinam, ki so dokumentirane v opisu vgrajenega vgrajenega ukaza, bash interpretira naslednje možnosti, ko se zanima:

-c niz

Če je prisotna opcija -c , se ukazi preberejo iz niza . Če po nizu obstajajo argumenti, so dodeljeni pozicijskim parametrom, začenši z $ 0 .

-jaz

Če je prisotna možnost -i , je lupina interaktivna .

-l

Ustvarite bash kot če bi ga bilo treba poklicati kot prijavno lupino (glej INVOCATION spodaj).

-r

Če je prisotna opcija -r , bo lupina postala omejena (glej spodaj OMEJENA LUČKA ).

-s

Če je prisotna opcija -s ali če po obdelavi opcije ne ostanejo nobeni argumenti, se ukazi berejo s standardnega vhoda. Ta možnost omogoča nastavitev pozicijskih parametrov pri pozivu interaktivne lupine.

-D

Seznam vseh dvostranskih nizov, ki jim sledi $, je natisnjen na standardni ouput. To so nizi, ki so podvrženi prevajanju jezikov, če trenutni jezik ni C ali POSIX . To pomeni možnost -n ; nobenih ukazov ne bo izveden.

[- +] O [ shopt_option ]

shopt_option je ena od lupinskih možnosti, ki jih je sprejela vgrajena trgovina (glej spodaj SHELL BUILTIN COMMANDS ). Če je prisotna shopt_option , -O nastavi vrednost te možnosti; + O ga izpusti. Če shopt_option ni dobavljen, so imena in vrednosti lupinskih možnosti, ki jih je sprejela trgovina , natisnjene na standardnem izhodu. Če je možnost za klicanje + O , je izhod prikazan v obliki, ki jo je mogoče ponovno uporabiti kot vhod.

-

A - signalizira konec možnosti in onemogoči nadaljnjo obdelavo opcij. Vsi argumenti po - se obravnavajo kot imena datotek in argumenti. Argument - je enakovreden - .

Bash razlaga tudi več možnosti z več znaki. Te možnosti morajo biti prikazane v ukazni vrstici, preden se prepoznajo enoparinske možnosti.

--dump-po-strings

Enakovreden -D , vendar je izhod v datoteki GNU gettext po (prenosni objekt).

- dump-strings

Enakovredno -D .

- pomoč

Prikaže sporočilo o uporabi na standardnem izhodu in uspešno zaključi.

--init-file datoteka

- datoteka rcfile

Izvedite ukaze iz datoteke namesto standardne osebne datoteke za inicializacijo ~ / .bashrc, če je lupina interaktična (glej INVOCATION spodaj).

--Vpiši se

Enakovredno -l .

- obnašanje

Ne uporabljajte knjižnice knjižnice GNU za branje ukaznih vrstic, kadar je lupina interaktična.

- neprofil

Ne berite sistemske zagonske datoteke / etc / profile ali katere koli osebne datoteke za inicializacijo ~ / .bash_profile , ~ / .bash_login ali ~ / .profile . Privzeto, bash bere te datoteke, ko se zanjo kot prijavna lupina (glej spodaj INVOCATION ).

- NORC

Ne brati in ne izvajajte osebne datoteke za inicializacijo ~ / .bashrc, če je lupina interaktivna. Ta možnost je privzeto vklopljena, če se lupina izpiąe kot sh .

- posek

Spremenite vedenje bash, kjer se privzeta operacija razlikuje od standarda POSIX 1003.2, da se bo ujemala s standardnim načinom ( posix ).

- omejeno

Lupina postane omejena (glejte spodnjo RESTRICTED SHELL ).

-rpm-zahteva

Izdelajte seznam datotek, ki so potrebne za zagon skripta. To pomeni "-n" in veljajo enake omejitve kot preverjanje preverjanja napak pri sestavljanju; Izrezki, [] testi in evali niso razčlenjeni, zato je mogoče nekatere odvisnosti zamuditi. --verbose enakovredno -v .

- različica

Prikažejo informacije o različici za ta primer bash na standardnem izhodu in uspešno izhod.

ARGUMENTI

Če po obdelavi opcij ostanejo argumenti in ni bila priložena možnost -c ali -s , se domneva, da je prvi argument ime datoteke, ki vsebuje ukaze lupine. Če se bash uporablja na ta način, je $ 0 nastavljeno na ime datoteke, položajni parametri pa so nastavljeni na preostale argumente. Bash bere in izvrši ukaze iz te datoteke, nato pa zapusti. Stanje izhoda Bash je stanje izhoda zadnjega ukaza, izvedenega v skriptu. Če noben ukaz ni izveden, je stanje izhoda 0. Najprej se poskusi odpreti datoteka v trenutnem imeniku in, če ni najdena datoteka, potem lupina išče po imeniku v PATH-u za skript.

INVOCATION

Prijavna lupina je tista, katere prvi znak ničle je - , ali pa se je začel z možnostjo --login .

Interaktivna lupina je ena, ki se je začela brez argumentov brez možnosti in brez možnosti -c , katerih standardni vhod in izhod sta oba povezana s terminali (kot je določen z isatty (3)), ali pa se je začel z možnostjo -i . PS1 je nastavljen in $ - vključuje i, če je bash interaktiven, kar omogoča skripto lupine ali zagonsko datoteko, da testira to stanje.

Naslednji odstavki opisujejo, kako bash izvaja svoje zagonske datoteke. Če katera od datotek obstaja, vendar je ni mogoče prebrati, bash poroča o napaki. Tilde so razširjene v imenskih datotekah, kot je opisano spodaj pod Tilde Expansion v razdelku EXPANSION .

Ko se bash prikliče kot interaktivna prijavna lupina ali kot neinteraktivna lupina z možnostjo --login , najprej prebere in izvrši ukaze iz datoteke / etc / profile , če ta datoteka obstaja. Po branju te datoteke išče ~ / .bash_profile , ~ / .bash_login in ~ / .profile v tem vrstnem redu in bere in izvrši ukaze iz prvega, ki obstaja in je berljiv. Možnost --noprofile se lahko uporabi, ko lupina zažene to obnašanje.

Ko zapusti prijavna lupina, bash bere in izvrši ukaze iz datoteke ~ / .bash_logout , če obstaja.

Ko se zažene interaktivna lupina, ki ni prijavna lupina, bash bere in izvrši ukaze iz ~ / .bashrc , če ta datoteka obstaja. To je mogoče preprečiti z uporabo možnosti --norc . Možnost datoteke --rcfile bo prisilila bash brati in izvršiti ukaze iz datoteke namesto ~ / .bashrc .

Ko se bash ne zažene interaktivno, za zagon lupinskega skripta na primer išče spremenljivko BASH_ENV v okolju, razširi svojo vrednost, če se tam pojavi, in uporablja razširjeno vrednost kot ime datoteke, ki jo je mogoče brati in izvršiti . Bash se obnaša tako, kot da je bil izveden naslednji ukaz:

če je [-n "$ BASH_ENV"]; potem. "$ BASH_ENV"; fi

vendar se vrednost spremenljivke PATH ne uporablja za iskanje imena datoteke.

Če se bash sklicuje z imenom sh , poskuša posnemati začetno vedenje zgodovinskih različic sh, čim bolj natančno, hkrati pa tudi v skladu s standardom POSIX. Ko se kot interaktivna prijavna lupina ali neinteraktivna ukazna lupina z možnostjo --login sklicuje , najprej poskusi prebrati in izvršiti ukaze iz / etc / profile in ~ / .profile v tem vrstnem redu. Možnost --noprofile se lahko uporabi za preprečevanje tega vedenja. Ko se kot interaktivni ukaz z imenom sh shrani , bash išče spremenljivko ENV , razširi svojo vrednost, če je definirana, in uporablja razširjeno vrednost kot ime datoteke, ki jo je mogoče brati in izvršiti. Ker se lupina sklicuje kot sh , ne poskuša brati in izvrševati ukazov iz katere koli druge zagonske datoteke, izbira -rcfile nima učinka. Neinteraktivna lupina, na katero se sklicuje ime sh , ne poskuša prebrati nobenih drugih zagonskih datotek. Ko se skliče kot sh , bash vstopi v način posix po branju zagonskih datotek.

Ko se bash zažene v načinu posix , kot pri ukazni vrstici --posix , sledi standardu POSIX za zagonske datoteke. V tem načinu interaktivne lupine razširijo spremenljivko ENV in ukazi se berejo in izvajajo iz datoteke, katere ime je razširjena vrednost. Nobene druge zagonske datoteke se ne preberejo.

Bash poskuša določiti, kdaj ga izvaja datotečni oddaljeni ukaz, običajno rshd . Če bash ugotovi, da ga upravlja rshd , bere in izvaja ukaze iz ~ / .bashrc , če ta datoteka obstaja in je berljiva. To ne bo storil, če se sklicuje kot sh . Možnost --norc se lahko uporabi za zaviranje tega obnašanja, opcija -rcfile pa se lahko uporabi za siljenje druge datoteke, ki jo je treba brati, vendar rshd običajno ne pokliče ukazne lupine s temi možnostmi ali dovoljuje, da se jih navede.

Če se lupina zažene z dejanskim ID-jem uporabnika (skupine), ki ni enaka ID-ju pravega uporabnika (skupina), in ni na voljo -p , se ne berejo zagonske datoteke, funkcije lupine niso podedovane iz okolja, SHELLOPTS spremenljivka, če se pojavi v okolju, je prezrta in dejanski uporabniški ID je nastavljen na pravi ID uporabnika. Če je pri pozivu priložena opcija -p , je začetno vedenje enako, vendar se učinkovitega uporabniškega ID-ja ne ponastavi.

DEFINICIJE

V vsem preostalem delu tega dokumenta se uporabljajo naslednje opredelitve.

prazno

Prostor ali jeziček.

beseda

Zaporedje znakov, ki jih lupina obravnava kot eno enoto. Znan tudi kot žeton .

ime

Beseda, sestavljena samo iz alfanumeričnih znakov in podčrta, in se začne z abecednim znakom ali podčrtajem. Imenuje se tudi identifikator .

metacharacter

Znak, ki ločuje besedo, ko ni znana oseba. Ena od naslednjih:

| &; () <> space tab

nadzorni operater

Tok, ki izvaja nadzorno funkcijo. To je eden od naslednjih simbolov:

|| & &&; ;; () |

REZERVNE BESEDE

Rezervirane besede so besede, ki imajo za lupino poseben pomen. Naslednje besede so priznane kot rezervirane, ko niso uveljavljene in bodisi prva beseda preprostega ukaza (glej spodaj SHELL GRAMMAR ) ali tretjo besedo primera ali ukaza:

! primer naredi elif drugega esac fi za funkcijo, če v izbiri nato, dokler {} čas [[]]

SHELL GRAMMAR

Preprosti ukazi

Preprost ukaz je zaporedje dodatnih opcij spremenljivk, ki jim sledijo prazno- ločene besede in preusmeritve ter jih prekine nadzorni operater . Prva beseda določa ukaz, ki se bo izvedel, in se prenese kot argument nič. Preostale besede se prenesejo kot argumenti na ukaz, ki se ga je skliceval.

Povratna vrednost preprostega ukaza je stanje izhoda ali 128 + n, če je ukaz zaprt s signalom n .

Cevovodi

Plinovod je zaporedje enega ali več ukazov, ločenih z znakom | . Oblika plinovoda je:

[ čas [ -p ]] [! ] ukaz [ | command2 ...]

Standardni izhod ukaza je povezan s cevjo na standardni vhod ukaza2 . Ta povezava se izvede pred preusmeritvami, ki jih določi ukaz (glej spodaj REDIRECTION ).

Če rezervirana beseda ! pred cevovodom je stanje izhodov tega cevovoda logična NOT za status izhoda zadnjega ukaza. V nasprotnem primeru je status plinovoda izhodni status zadnjega ukaza. Lupina čaka, da se vsi ukazi v plinovodu končajo, preden vrnejo vrednost.

Če je časovno pridržana beseda pred cevovodom, se po zaključku cevovoda pojavi tudi pretekel, pa tudi uporabniški in sistemski čas, porabljen z njegovo izvedbo. Možnost -p spremeni izhodno obliko v tisto, ki jo določi POSIX. Spremenljivka TIMEFORMAT je lahko nastavljena na formatni niz, ki določa, kako naj bodo prikazane informacije o časovnem razporedu; glejte opis TIMEFORMAT pod spremenljivkami Shell spodaj.

Vsak ukaz v plinovodu se izvede kot ločen proces (tj. V podcelju).

Seznami

Seznam je zaporedje enega ali več cevovodov, ki jih ločuje eden od operaterjev ; , & , && , ali || , in po izbiri prekinjen z enim izmed ; , & ali .

Od teh operaterjev seznama, && in || imajo enako prednost, sledijo ; in &, ki imajo enako prednost.

Zaporedje ene ali več novih vrstic se lahko prikaže na seznamu namesto točke podpičja, da se ukazi razmejijo.

Če ukaz za upravljanje prekine upravljalni operater & , lupina izvrši ukaz v ozadju v podoknu. Lupina ne počaka, da bi ukaz končal, stanje vrnitve pa je 0. Ukazi, ločeni z a ; se izvajajo zaporedno; lupina čaka, da se vsak ukaz konča. Stanje vrnitve je stanje izhoda zadnjega izvršenega ukaza.

Kontrolni operaterji && in || označi IN seznam in seznamov OR. Seznam IN in ima obliko

command1 && command2

ukaz2 se izvrši, če in samo če ukaz1 vrne stanje izhoda nič.

Seznam OR je v obliki

command1 || command2

ukaz2 se izvede, če in samo če ukaz1 vrne stanje nične nič. Stanje vrnitve seznamov AND in OR je stanje izhoda zadnjega ukaza, izvedenega na seznamu.

Komandni ukazi

Kombinirani ukaz je eden od naslednjih:

( seznam )

seznam se izvaja v podcelju. Različne naloge in vgrajeni ukazi, ki vplivajo na okolje lupine, po končanem ukazu ne ostanejo v veljavi. Stanje vrnitve je stanje izhoda seznama .

{ list ; }

seznam se preprosto izvede v trenutnem okolju lupine. seznam je treba prekiniti z novo vrstico ali podpičjem. To je znano kot skupinski ukaz . Stanje vrnitve je stanje izhoda seznama . Upoštevajte, da so za razliko od meta-karakterov ( in ) , { in } rezervirani besedi in se morajo pojaviti, če je dovoljena prepoznavna rezervirana beseda. Ker ne povzročajo preloma besede, jih je treba ločiti s seznama po presledkih.

(( izraz ))

Izraz se oceni v skladu s pravili, opisanimi spodaj pod ARITHMETIC EVALUATION . Če je vrednost izraza ničelna, je stanje vračanja 0; sicer je status vrnitve 1. To je točno enakovredno, če pustite " izraz ".

[[ izraz ]]

Vrnite status 0 ali 1, odvisno od ocene izraza pogojnega izraza . Izrazi so sestavljeni iz primarnih primerov, opisanih spodaj pod POGOJNIMI IZRAZI . Razdelitev besed in širjenje poti se ne izvajajo med besedami med [[ in ]] ; ekspanzijo tilde, parametrom in spremenljivim širjenjem, aritmetično ekspanzijo, zamenjavo ukazov, zamenjavo postopka in odstranitev citira.

Ko uporabite operatorji == in ! =, Se niz na desni strani operaterja šteje za vzorec in se ujema s pravili, opisanimi spodaj pod Prilagajanje vzorcev . Povratna vrednost je 0, če se niz ujema ali se ne ujema z vzorcem, oziroma 1 drugače. Vsak del vzorca se lahko navede, tako da ga je treba ujemati kot niz.

Izrazi se lahko kombinirajo z naslednjimi operatorji, ki so navedeni po padajočem vrstnem redu:

( izraz )

Vrne vrednost izraza . To se lahko uporabi za nadomeščanje normalne prednostne naloge operaterjev.

! izraz

Res je, če je izgovor napačen.

expression1 && expression2

Res je, če sta obe izrazi1 in izraz2 resnična.

izraz1 || izraz2 True, če je izraz1 ali izraz2 resničen.

&& in || operaterji ne vrednotijo izraza2, če je vrednost izraza1 zadostna, da se določi povratna vrednost celotnega pogojnega izraza.

za ime [ v besedi ]; naredi seznam ; Končano

Seznam besed, ki sledijo, je razširjen in ustvarja seznam elementov. Ime spremenljivke je nastavljeno na vsak element tega seznama in seznam se izvede vsakič. Če je beseda izpuščena, ukaz za ukaz izvrši seznam enkrat za vsak nastavljen položajni parameter (glej PARAMETRI spodaj). Stanje vrnitve je stanje izhoda zadnjega ukaza, ki se izvaja. Če razširitev elementov, ki sledijo rezultatom, vsebuje prazen seznam, se ne izvršijo nobeni ukazi, stanje vrnitve pa je 0.

za (( expr1 ; expr2 ; expr3 )); naredi seznam ; Končano

Prvič, aritmetični izraz expr1 se ovrednoti v skladu s pravili, opisanimi spodaj pod ARITHMETIC EVALUATION . Aritmetični izraz expr2 se potem ponovi, dokler ne oceni nič. Vsakič, ko expr2 oceni vrednost, ki ni nič, se izvede seznam in oceni aritmetični izraz expr3 . Če je kateri koli izraz izpuščen, se obnaša tako, kot da oceni vrednost 1. Povratna vrednost je stanje izhoda zadnjega ukaza na seznamu, ki se izvrši, ali pa je napačen, če je kateri od izrazov neveljaven.

izberite ime [ v besedi ]; naredi seznam ; Končano

Seznam besed, ki sledijo, je razširjen in ustvarja seznam elementov. Skupina razširjenih besed je natisnjena na standardni napaki, vsaka pred številko. Če je beseda izpuščena, se pozicijski parametri natisnejo (glej PARAMETRI spodaj). Nato se prikaže poziv PS3 in črta od standardnega vhoda. Če je vrstica sestavljena iz številke, ki ustreza eni od prikazanih besed, potem je vrednost imena nastavljena na to besedo. Če je črta prazna, se znova prikažejo besede in poziv. Če je EOF prebrisan, ukaz zaključi. Vsaka druga vrednost bere povzroči, da je ime nastavljeno na nič. Črta se shrani v spremenljivko REPLY . Seznam se izvede po vsaki izbiri, dokler se ne izvede ukaz za prekinitev . Stanje izhoda izhoda je stanje izhoda zadnjega ukaza, izvedenega na seznamu , ali nič, če ni bilo izvedenih nobenih ukazov.

primer beseda v [[(] vzorcu [ | vzorec ]

Ukaz slučaja najprej razširi besedo in jo poskuša primerjati z vsakim vzorec po vrsti, z uporabo istih pravil ujemanja kot za razširitev poti (glej spodaj razširitev poti ). Ko najdete tekmo, se izvrši ustrezen seznam . Po prvem tekmovanju ni poskusov. Stanje izhoda je nič, če se vzorec ne ujema. V nasprotnem primeru je status izhoda zadnjega ukaza, izvedenega na seznamu .

če je seznam ; nato seznam; [ elif seznam ; nato seznam ; ] ... [ drug seznam ; ] fi

Če je izveden seznam . Če je stanje izhoda nič, se izvede takratni seznam . V nasprotnem primeru se vsak elifni seznam izvede v obratnem vrstnem redu in če je stanje izhoda nič, se izvrši ustrezen seznam , ki se zaključi. V nasprotnem primeru se seznam izvede, če je prisoten. Stanje izhoda je stanje izhoda zadnjega izvršenega ukaza ali nič, če noben pogoj ni preizkušen.

medtem ko seznam ; naredi seznam ; Končano

do seznama ; naredi seznam ; Končano

Ukaz medtem ko neprestano izvaja seznam opravil, dokler zadnji ukaz v seznamu vrne stanje izhoda nič. Dokler ukaz ni identičen ukazu medtem ko je preskus zanemarjen; seznam opravil se izvede, dokler zadnji ukaz na seznamu vrne status brez izhoda. Stanje izhoda v času in do ukazov je stanje izhoda zadnjega ukaza naredi seznam , ali nič, če noben ni bil izveden.

[ funkcija ] ime () { seznam ; }

To definira funkcijo z imenom . Telo funkcije je seznam ukazov med {in}. Ta seznam se izvede, kadar je ime podano kot ime preprostega ukaza. Stanje izhoda funkcije je stanje izhoda zadnjega ukaza, ki se izvaja v telesu. (Glejte FUNKCIJE spodaj.)

PRIPOMBE

V neinteraktivni lupini ali interaktivni lupini, v kateri je omogočena možnost interactive_comments za vgrajeno trgovino (glej spodaj SHELL BUILTIN COMMANDS ), se beseda, ki se začne z #, povzroči, da se ta beseda in vsi preostali znaki v tej vrstici ne upoštevajo. Interaktivna lupina brez omogočene možnosti interactive_comments ne omogoča komentarjev. V interaktivnih ukaznih vrsticah je privzeta možnost interactive_comments.

QUOTING

Citiranje se uporablja za odstranitev posebnega pomena določenih znakov ali besed v lupini. Ponudba se lahko uporabi za onemogočanje posebne obravnave posebnih znakov, za preprečitev, da so pridržane besede prepoznane kot takšne in za preprečevanje širjenja parametrov.

Vsak od zgoraj naštetih meta-znakov, ki so navedeni pod DEFINITIONS, ima poseben pomen za lupino in ga je treba navesti, če se želi predstaviti.

Ko se uporabljajo objekti za razširitev zgodovine ukazov, je značilnost razširitve zgodovine običajno ! , je treba navesti, da se prepreči širitev zgodovine.

Obstajajo trije mehanizmi citiranja: znak za pobeg , enojne narekovaje in dvojni narekovaji.

Nepodprta poševnica ( \ ) je ušesni znak . Ohranjuje dobesedno vrednost naslednjega znaka, ki sledi, z izjemo . Če se pojavi par \ in črko poševnice ni navedena, se \ obravnava kot nadaljevanje vrstice (to pomeni, da je odstranjeno iz vhodnega toka in dejansko zanemarjeno).

Zaprti znaki v posameznih narekovajih ohranjajo dobesedno vrednost vsakega znaka znotraj ponudb. En sam citat se ne sme pojaviti med posameznimi ponudbami, tudi če je pred njim poševnica.

Zapisi znakov v dvojnih narekovajih ohranjajo dobesedno vrednost vseh znakov znotraj ponudb, z izjemo $ , ` in \ . Znaki $ in ` ohranijo svoj poseben pomen v dvojnih narekovajih. Backslash ohranja svoj poseben pomen le, če mu sledi eden od naslednjih znakov: $ , ` , " , \ ali . Dvojni citat je lahko naveden v dvojnih narekovajih, ki so ga predhodno označili s poševnico.

Posebni parametri * in @ imajo poseben pomen pri dvojnih narekovajih (glej spodaj PARAMETRI ).

Besede oblike $ ' string ' se obravnavajo posebej. Beseda se razširi v niz , z zamenjanimi poševnicami pa je zamenjano, kot določa standard ANSI C. Zaporedna izhodna mesta backslash, če so prisotna, se dekodirajo na naslednji način:

\ a

opozorilo (zvonec)

\ b

backspace

\ e

ušesni znak

\ f

obrazec krme

\ n

nova linija

\ r

povratni voziček

\ t

horizontalni jeziček

\ v

navpični zavihek

\\

poševnica

\ '

enojni citat

\ nnn

osem-bitni znak, katerega vrednost je osmiška vrednost nnn (ena do tri številke)

\ x HH

osem-bitni znak, katerega vrednost je šestnajstiška vrednost HH (ena ali dve šestnajstiški številki)

\ c x

kontrolni znak

Razširjeni rezultat je en citiran, kot da znak za dolar ni bil prisoten.

Dvomestni niz, ki mu sledi znak za dolar ( $ ), bo povzročilo, da se niz prevede glede na trenutni jezik. Če je trenutno locale C ali POSIX , se znak za dolar ne upošteva. Če je niz preveden in nadomeščen, je zamenjava dvojno citirana.

PARAMETRI

Parameter je subjekt, ki shranjuje vrednosti. To je lahko ime , številka ali eden od posebnih znakov, navedenih spodaj pod Posebnimi parametri . Za namene lupine je spremenljivka parameter, ki ga označuje ime . Spremenljivka ima vrednost in nič ali več atributov . Atributi so dodeljeni z ukazom declare builtin (glej spodaj razglasiti v SHELL BUILTIN COMMANDS).

Parameter je nastavljen, če je dodeljena vrednost. Neveljavni niz je veljavna vrednost. Ko je nastavljena spremenljivka, je morda neuporabna samo z uporabo ukaza unset builtin (glej spodaj SHELL BUILTIN COMMANDS ).

Spremenljivki se lahko dodeli izjavo o obrazcu

ime = [ vrednost ]

Če vrednost ni podana, je spremenljivki dodeljen ničelni niz. Vse vrednosti so podvržene razširitvi tilde, parametru in spremenljivemu razširitvi, zamenjavi ukazov, aritmetični ekspanziji in odstranitvi citira (glej spodaj EXPANSION ). Če ima spremenljivka svoj niz atributov celega števila , je vrednost podvržena aritmetični ekspanziji, tudi če se razširitev $ ((...)) ne uporablja (glej Aritmetično razširitev spodaj). Razdelitev besed se ne izvaja, z izjemo "$ @", kot je razloženo spodaj pod Posebnimi parametri . Razširitev poti se ne izvede. Izjave o dodelitvi so lahko prikazane tudi kot argumenti za deklaracije , vnašanje , izvoz , branje in lokalne vgrajene ukaze.

Pozicijski parametri

Položajni parameter je parameter, označen z eno ali več števkami, razen enojne številke 0. Položajni parametri se dodelijo iz argumentov lupine, kadar se zanjo izkaže, in jih je mogoče prerazporediti z uporabo nastavljenega vgrajenega ukaza. Položajnim parametrom ni mogoče dodeliti izjav o dodelitvi. Položajni parametri se začasno zamenjajo, ko se izvaja funkcija lupine (glej FUNCTIONS spodaj).

Če se pozicijski parameter, sestavljen iz več kot ene številke, razširi, ga je treba zakleniti (glejte spodnji razdelek EXPANSION ).

Posebni parametri

Lupina obravnava več parametrov posebej. Te parametre je mogoče sklicevati le; dodelitev jim ni dovoljena.

*

Razširjuje se na pozicijske parametre, začenši z ene. Ko se razširitev zgodi v dvojnih narekovajih, se razširi na eno besedo z vrednostjo vsakega parametra, ločenega s prvim znakom posebne spremenljivke IFS . To pomeni, da je " $ * " enakovreden " $ 1 c $ 2 c ... ", kjer je c prvi znak vrednosti spremenljivke IFS . Če IFS ni nastavljen, so parametri ločeni s presledki. Če je IFS neveljaven, so parametri združeni brez vmesnih separatorjev.

@

Razširjuje se na pozicijske parametre, začenši z ene. Ko pride do razširitve znotraj dvojnih narekov, se vsak parameter razširi v ločeno besedo. To pomeni, da je " $ @ " enakovreden " $ 1 " " $ 2 " ... Če ni nobenih pozicijskih parametrov, se " $ @ " in $ @ razširijo na nič (to pomeni, da so odstranjeni).

#

Razširi na število pozicijskih parametrov v decimalki.

?

Razširi v stanje nedavno izvedenega plinovoda v ospredju.

-

Razširi na trenutne zastave možnosti, kot je določeno pri pozivu, z nastavljenim vgrajenim ukazom ali tistimi, ki jih določi lupina (kot je opcija -i ).

$

Razširi na identifikacijsko številko procesa v lupini. V pod-zbirki () se razširi na identifikacijsko številko procesa trenutne ukazne lupine, in ne podomrežja.

!

Razširi na identifikacijsko številko procesa zadnjega izvršenega ukaza (asinhroni) v ozadju.

0

Razširi na ime skripte ali lupine. To je nastavljeno na začetek lupine. Če se bash sklicuje z datoteko ukazov, je $ 0 nastavljeno na ime te datoteke. Če se bash zažene z možnostjo -c , je potem, ko je niz, ki ga je treba izvesti, nastavljen na prvi argument po vrednosti 0 . V nasprotnem primeru je nastavljeno na ime datoteke, ki se uporablja za uveljavljanje bash , kot je podano v argumentu nič.

_

Pri zagonu ukazne lupine nastavite na absolutno ime datoteke lupine ali skriptne lupine, ki se izvaja, kot je navedeno na seznamu argumentov. Nato se po razširitvi razširi na zadnji argument prejšnjega ukaza. Prav tako nastavite na celotno ime datoteke vsakega ukaza, izvedenega in postavljenega v okolje, ki se izvaža v ta ukaz. Pri preverjanju pošte ta parameter vsebuje ime poštne datoteke, ki se trenutno preverja.

Shell spremenljivke

Oboje nastavi naslednje spremenljivke:

BASH

Razširi na celotno ime datoteke, ki se uporablja za uveljavljanje tega primera bash .

BASH_VERSINFO

Spremenljivka matrične matrike, katere člani imajo informacije o različici za ta primerek bash . Vrednosti, dodeljene članom matrike, so naslednje:

BASH_VERSINFO [ 0]

Glavna številka različice ( sprostitev ).

BASH_VERSINFO [ 1]

Manjša različica ( različica ).

BASH_VERSINFO [ 2]

Raven obliža.

BASH_VERSINFO [ 3]

Različica gradnje.

BASH_VERSINFO [ 4]

Stanje javljanja (npr. Beta1 ).

BASH_VERSINFO [ 5]

Vrednost MACHTYPE .

BASH_VERSION

Razširi v niz, ki opisuje različico tega primera bash .

COMP_CWORD

COMP_LINE

Trenutna ukazna vrstica. Ta spremenljivka je na voljo samo v funkcijah lupine in zunanjih ukazih, na katere se kliče programirljive končne naprave (glejte Programmable Completion below).

COMP_POINT

COMP_WORDS

Spremenljivka polja (glej spodaj nizi ), ki je sestavljena iz posameznih besed v trenutni ukazni vrstici. Ta spremenljivka je na voljo le v funkcijah lupine, na katere se sklicujejo programirljivi objekti za dokončanje (glejte Programmable Completion below).

DIRSTACK

Spremenljivka matrike (glej spodnja polja), ki vsebuje trenutno vsebino v skladu imenikov. Imeniki se pojavijo v svežnju v vrstnem redu, ki ga prikažejo dirs builtin. Dodelitev članov te spremenljivke arrayja se lahko uporablja za spreminjanje imenikov, ki so že v svežnju, vendar je treba dodati in odstraniti imenike. Naloga te spremenljivke ne bo spremenila trenutnega imenika. Če je DIRSTACK neusklajen , izgubi svoje posebne lastnosti, tudi če je naknadno ponastavljena.

EUID

Razširi na dejansko uporabniško ID trenutnega uporabnika, inicializiran pri zagonu ukazne lupine. Ta spremenljivka je samo enkrat.

FUNCNAME

Ime katere koli trenutne funkcije izvajalca lupine. Ta spremenljivka obstaja samo, ko se izvaja funkcija ukazne lupine. Namenske funkcije FUNCNAME nimajo učinka in vrnejo stanje napake. Če FUNCNAME ni nastavljen, izgubi svoje posebne lastnosti, tudi če je nato ponastavljen.

SKUPINE

Spremenljivka nizov, ki vsebuje seznam skupin, od katerih je trenutni uporabnik član. Dodelitve skupinam nimajo učinka in vrnejo status napake. Če GROUPS ni nastavljen, izgubi svoje posebne lastnosti, tudi če je pozneje ponastavljena.

HISTCMD

Številka zgodovine ali indeks seznama zgodovine trenutnega ukaza. Če HISTCMD ni nameščen , izgubi svoje posebne lastnosti, tudi če je naknadno ponastavljena.

HOSTNAME

Samodejno nastavite na ime trenutnega gostitelja.

HOSTTYPE

Samodejno nastavite na niz, ki enolično opisuje vrsto stroja, na katerem se izvaja bash . Privzeta nastavitev je odvisna od sistema.

LINENO

Vsakič, ko se ta parameter sklicuje, lupina nadomesti decimalno številko, ki predstavlja trenutno zaporedno številko vrstice (začenši z 1) znotraj skripte ali funkcije. Če ni v skripti ali funkciji, nadomestljena vrednost ni zagotovljena za smiselno. Če LINENO ni nameščen , izgubi svoje posebne lastnosti, tudi če je naknadno ponastavljena.

MACHTYPE

Samodejno nastavite na niz, ki v celoti opisuje vrsto sistema, na katerem se izvaja bash , v standardnem formatu GNU cpu-company-system . Privzeta nastavitev je odvisna od sistema.

OLDPWD

Prejšnji delovni imenik, kot ga je določil ukaz cd .

OPTARG

Vrednost zadnje možnosti izbire, ki jo obdeluje ukaz getopts builtin (glej spodaj SHELL BUILTIN COMMANDS ).

OPTIND

Indeks naslednjega argumenta, ki ga bo obdelal ukaz getopts builtin (glej spodaj SHELL BUILTIN COMMANDS ).

OSTYPE

Samodejno nastavite na niz, ki opisuje operacijski sistem, na katerem se izvaja bash . Privzeta nastavitev je odvisna od sistema.

PIPESTATUS

Spremenljivka polja (glej spodaj nizi ), ki vsebuje seznam vrednosti izhodnih statusov iz procesov v najbolj nedavno izvedenem plinskem ozadju (ki lahko vsebuje samo en ukaz).

PPID

ID procesa matične lupine. Ta spremenljivka je samo enkrat.

PWD

Trenutni delovni imenik kot ga je določil ukaz cd .

NAKLJUČEN

Vsakič, ko se sklicuje na ta parameter, se generira naključno celo število med 0 in 32767. Zaporedje naključnih števil se lahko inicializira tako, da se vrednost RANDOM dodeli. Če je RANDOM neusklajen, izgubi svoje posebne lastnosti, tudi če je potem ponastavljena.

ODGOVORI

Nastavite na linijo vnosa, ki jo bere ukaz command readin, če ni podan noben argument.

SECONDS

Vsakokrat, ko se ta parameter sklicuje, se vrne število sekund, odkar je povrnjena ukazna lupina. Če je vrednost dodeljena SECONDS , je vrednost, vrnjena pri naslednjih referencah, število sekund od dodelitve in dodeljene vrednosti. Če SECONDS ni nastavljen, izgubi svoje posebne lastnosti, tudi če je pozneje ponastavljen.

SHELLOPTS

Seznam ločenih možnosti ukazne lupine. Vsaka beseda na seznamu je veljaven argument za -o opcijo za nastavljeni vgrajeni ukaz (glej spodaj SHELL BUILTIN COMMANDS ). Možnosti, ki se pojavljajo v SHELLOPTS, so tiste, o katerih se poroča, kot jih prikazuje set -o . Če je ta spremenljivka v okolju, ko zažene bash , bo vsaka možnost ukazne lupine na seznamu omogočena pred branjem zagonskih datotek. Ta spremenljivka je samo za branje.

SHLVL

Poveča se z enim vsakič, ko se zažene primerek bash .

UID

Razširi na uporabniški ID trenutnega uporabnika, inicializiran pri zagonu ukazne lupine. Ta spremenljivka je samo enkrat.

Oboje uporablja naslednje spremenljivke. V nekaterih primerih bash dodeli privzeto vrednost spremenljivki; ti primeri so navedeni spodaj.

BASH_ENV

Če je ta parameter nastavljen, ko bash izvaja lupinski skript, se njegova vrednost razlaga kot ime datoteke, ki vsebuje ukaze za inicializacijo lupine, kot v ~ / .bashrc . Vrednost BASH_ENV je podvržena razširjanju parametrov, zamenjavi ukazov in aritmetični ekspanziji, preden se razlaga kot ime datoteke. PATH se ne uporablja za iskanje končnega imena datoteke.

CDPATH

Pot iskanja za ukaz cd . To je seznam imenikov, ločenih s kolono, v katerem lupina išče ciljne imenike, ki jih določa ukaz cd . Vzorec vrednosti je ".: ~: / Usr".

KOLONE

Uporablja se z ukazom select builtin, da določi širino terminala pri tiskanju izbirnih seznamov. Samodejno nastavite po prejemu potrdila SIGWINCH.

ZDRUŽITI

Spremenljivka matrike, iz katere bash bere možne dokončanje, ki ga ustvari funkcija lupine, na katero se sklicuje programabilni objekt za dokončanje (glejte Programmable Completion below).

FCEDIT

Privzeti urejevalnik ukaza fc builtin.

FIGNORE

Seznam končnih nastavkov, ki jih je treba ločiti s številčnimi črkami pri zagonu filma (glejte READLINE spodaj). Ime datoteke, katere pripona se ujema z enim od vnosov v FIGNORE, je izključena s seznama ujemajočih se imenikov . Vzorec vrednosti je ".o: ~".

GLOBIGNORE

Seznam vzorcev, ločenih od debelega črk, ki določa niz imen datotek, ki jih je treba prezreti z razširitvijo poti. Če se ime datoteke, ki ga ujema vzorec razširitve poti, se tudi ujema z enim od vzorcev v GLOBIGNORE , se odstrani s seznama zadetkov.

HISTCONTROL

Če je nastavljena na vrednost ignorespacea , vrstice, ki se začnejo s presledkom , niso vpisane na seznamu zgodovine. Če nastavite vrednost zanemarjenih vrednosti, se vrstice, ki ustrezajo zadnji vrstici zgodovine, ne vnesejo. Vrednost ignorebota združuje dve možnosti. Če je unset ali če je nastavljena na katero koli drugo vrednost kot zgoraj, so vse vrstice, ki jih berljivi parser, shranjene na seznamu zgodovine, ob upoštevanju vrednosti HISTIGNORE . Funkcijo te spremenljivke nadomešča HISTIGNORE . Druga in naslednja vrstica ukaza z več linijami se ne preskusijo in se dodajajo v zgodovino ne glede na vrednost HISTCONTROL-a .

HISTFILE

Ime datoteke, v kateri je shranjena zgodovina ukazov (glejte ZGODNJA spodaj). Privzeta vrednost je ~ / .bash_history . Če je unset, zgodovina ukazov ni shranjena, ko interaktivna lupina zapusti.

HISTFILIZIRATI

Največje število vrstic v datoteki z zgodovino. Ko je tej spremenljivki dodeljena vrednost, se datoteka z zgodovino skrajša, če je potrebno, da ne vsebuje več kot to število vrstic. Privzeta vrednost je 500. Datoteka z zgodovino je tudi obrnjena na to velikost, ko jo zapisujete, ko interaktivna lupina zapusti.

HISTIGNORE

Seznam vzorcev, ločenih s kolonijami, ki se uporablja za odločitev, katere ukazne vrstice je treba shraniti na seznamu zgodovine. Vsak vzorec je zasidran na začetku vrstice in se mora ujemati s celotno črto (noben implicitni " * " ni dodan). Vsak vzorec se preskusi glede na črto, potem ko se uporabijo kontrole, ki jih določi HISTCONTROL . Poleg običajnih znakov vzorca lupine se » & « ujema z prejšnjo zgodovino. " & " se lahko ustvari z uporabo poševnice; pred poskusom tekme se odstrani poševnica. Druga in naslednja vrstica ukaza z več linijami se ne preskusijo in se dodajajo v zgodovino ne glede na vrednost HISTIGNORE .

VSAKOST

Število ukazov, ki jih je treba zapomniti v zgodovini ukazov (glej ZGODNJA spodaj). Privzeta vrednost je 500.

HOME

Domači imenik trenutnega uporabnika; privzeti argument za ukaz cd builtin. Vrednost te spremenljivke se uporablja tudi pri ekspanziji tilde.

HOSTFILE

Vsebuje ime datoteke v isti obliki kot / etc / hosts, ki ga je treba brati, ko lupina potrebuje za dokončanje imena gostitelja. Seznam možnih dokončanj imena gostitelja se lahko spremeni med izvajanjem lupine; pri naslednjem zagonu imena gostitelja po spremembi vrednosti, bash doda vsebino nove datoteke obstoječemu seznamu. Če je HOSTFILE nastavljen, a nima nobene vrednosti, bash poskuša prebrati / etc / hosts, da pridobi seznam možnih končnic imena gostitelja. Ko HOSTFILE ni nastavljen, se izbriše seznam gostiteljev.

IFS

Interni razdelilnik polj, ki se uporablja za razcepitev besed po razširitvi in ​​razdelitev vrstic v besede z ukazom readin builtin. Privzeta vrednost je `` ''.

IGNOREEOF

Nadzoruje delovanje interaktivne lupine po prejemu znaka EOF kot edini vhod. Če je nastavljena, je vrednost število zaporednih znakov EOF, ki jih je treba vnesti kot prve znake v vhodni vrstici pred izhodom iz bash . Če spremenljivka obstaja, vendar nima številske vrednosti ali nima nobene vrednosti, je privzeta vrednost 10. Če EOF ne obstaja, EOF označuje konec vnosa v lupino.

INPUTRC

Ime datoteke za zagonsko datoteko readline , ki preglasi privzeto vrednost ~ / .inputrc (glejte READLINE spodaj).

LANG

Uporablja se za določitev kategorije kategorij za katero koli kategorijo, ki ni posebej izbrana s spremenljivko, ki se začne z LC_ .

LC_ALL

Ta spremenljivka preglasi vrednost LANG in katero koli drugo spremenljivko LC_, ki določa kategorijo lokalnih kategorij.

LC_COLLATE

Ta spremenljivka določa vrstni red primerjave, ki se uporablja pri razvrščanju rezultatov razširitve poti, in določa vedenje izrazov razdalj, razredov ekvivalentnosti in zbirnih sekvenc znotraj širjenja poti in ujemanja vzorcev.

LC_CTYPE

Ta spremenljivka določa interpretacijo znakov in obnašanje znakovnih razredov znotraj razširitve poti in ujemanja vzorcev.

LC_MESSAGES

Ta spremenljivka določa locale, ki se uporablja za prevajanje dvojnih citatov, ki jim sledi $ .

LC_NUMERIC

Ta spremenljivka določa kategorijo locale, ki se uporablja za oblikovanje števil.

LINIJE

Uporabi ukaz select builtin, da določi dolžino stolpcev za izbor seznamov za izbiro. Samodejno nastavite po prejemu potrdila SIGWINCH.

MAIL

Če je ta parameter nastavljen na ime datoteke in ni nastavljena spremenljivka MAILPATH , bash obvesti uporabnika o prihodu pošte v navedeni datoteki.

MAILCHECK

Določa, kako pogosto (v nekaj sekundah) preverjajo pošto za pošto. Privzeta vrednost je 60 sekund. Ko je čas za preverjanje pošte, lupina to naredi, preden se prikaže primarni poziv. Če je ta spremenljivka izključena ali nastavljena na vrednost, ki ni številka, ki je večja ali enaka nič, lupina onemogoči preverjanje pošte.

MAILPATH

Seznam datotek z imeni, ki ga je treba preveriti za pošto, je ločen od debelega črk. Sporočilo, ki ga želite natisniti, ko je pošta prispe v določeno datoteko, lahko določite tako, da ime sporočila iz sporočila ločite s »?«. Ko se uporablja v besedilu sporočila, se _ _ razširi v ime trenutne poštne datoteke. Primer:

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

Bash dobiva privzeto vrednost za to spremenljivko, vendar je lokacija uporabniških poštnih datotek, ki jih uporablja, odvisna od sistema (npr. / Var / mail / USER ).

OPTERR

Če je nastavljena na vrednost 1, bash prikaže sporočila o napakah, ki jih generira ukaz getopts builtin (glej spodaj SHELL BUILTIN COMMANDS ). OPTERR se inicializira na 1 vsakič, ko se sklicuje na lupino ali pa se izvaja skriptni ukaz.

PATH

Pot za iskanje ukazov. To je seznam imenikov, ločenih s kolono, v katerem lupina išče ukaze (glej IZVLEČEK IZVAJANJA spodaj). Privzeta pot je odvisna od sistema in jo nastavi skrbnik, ki namesti bazh . Skupna vrednost je `` / usr / gnu / bin: / usr / local / bin: / usr / ucb: / bin: / usr / bin :. ''.

POSIXLY_CORRECT

Če se ta spremenljivka nahaja v okolju, ko se začne bash , lupina vstopa v način posix, preden se preberejo zagonske datoteke, kot če bi bila priložena možnost pozivanja --posix . Če je nastavljena, medtem ko lupina teče, bash omogoča način posix , kot če bi bil ukaz set -o posix izveden.

PROMPT_COMMAND

Če je nastavljena, se vrednost izvede kot ukaz pred izdajo vsakega primarnega pozivnika.

PS1

Vrednost tega parametra je razširjena (glej PROMPTING spodaj) in se uporablja kot primarni pozivni niz. Privzeta vrednost je `` \ s- \ v \ $ ''.

PS2

Vrednost tega parametra je razširjena kot pri PS1 in se uporablja kot sekundarni pozivni niz. Privzeta vrednost je `` > ''.

PS3

Vrednost tega parametra se uporabi kot poziv za ukaz za izbiro (glej zgoraj zgoraj SHELL GRAMMAR ).

PS4

Vrednost tega parametra je razširjena kot pri PS1 in vrednost je natisnjena, preden se v ukazni sledi prikaže vsak bash ukaza. Prvi znak PS4 se večkrat ponovi, če je to potrebno, da označuje več ravni izpraznitve. Privzeta vrednost je `` + ''.

TIMEFORMAT

Vrednost tega parametra se uporablja kot niz formatov, ki določa, kako naj se prikažejo podatki o časovnem času za cevovode, prednastavljene s časovno pridržano besedo. Znak % uvaja zaporedje pobega, ki se razširi na časovno vrednost ali druge informacije. Zaporne poti in njihovi pomeni so naslednji: zavore označujejo neobvezne dele.

%%

Dobesedno % .

% [ p ] [l] R

Pretečeni čas v sekundah.

% [ p ] [l] U

Število CPU sekund, porabljenih v uporabniškem načinu.

% [ p ] [l] S

Število CPU sekund, porabljenih v sistemskem načinu.

% P

Odstotek CPU, izračunan kot (% U +% S) /% R.

Neobvezno p je številka, ki natančno določa število decimalnih mest po decimalni vejici. Vrednost 0 ne povzroči nobene decimalne ali frakcijske vrednosti. Največ tri mesta po natančni decimalni vejici; vrednosti p več kot 3 se spremenijo v 3. Če p ni naveden, se uporabi vrednost 3.

Izbirni l določa daljšo obliko, vključno z minutami, obrazca MM m SS . FF s. Vrednost p določa, ali je frakcija vključena ali ne.

Če ta spremenljivka ni nastavljena, bash deluje, kot da ima vrednost $ '\ nreal \ t% 3lR \ nuser \ t% 3lU \ nsys% 3lS' . Če je vrednost nič, se ne prikažejo podatki o času. Ko je prikazan niz formatov, se dodaja nova linija.

TMOUT

Če je vrednost nastavljena na vrednost, ki je večja od nič, se TMOUT obravnava kot privzeti časovni zakasnitveni čas za branje vgrajenega. Komandni ukaz se zaključi, če vhod ne doseže po TMOUT sekundah, ko vhod prihaja iz terminala. V interaktivni lupini se vrednost razlaga kot število sekund, ki jih je treba čakati po vnosu po izdaji primarnega pozivnika. Bash konča, ko čaka na to število sekund, če vhod ne prispeva.

auto_resume

Ta spremenljivka nadzira, kako lupina deluje z uporabnikom in nadzorom opravila. Če je ta spremenljivka nastavljena, se enostavni ukazi z enim samim besedilom brez preusmeritev obravnavajo kot kandidati za nadaljevanje obstoječega ustavljenega dela. Ni dvoumnosti dovoljeno; če je več kot eno zaposlitev, ki se začne z vnesenim nizom, je izbrano zadnje delo. Ime zaustavljenega dela je v tem kontekstu ukazna vrstica, uporabljena za zagon. Če je točna vrednost nastavljena na točno vrednost, mora biti niz, ki je priložen, enak nazivu ustavljenega dela; če je nastavljen na podniz , mora biti niz, ki je priložen, ustrezal podstrani imena ustavljenega dela. Vrednost podstavka zagotavlja funkcionalnost, podobno%% ? identifikator delovnega mesta (glejte spodnji postopek). Če je nastavljena na katero koli drugo vrednost, mora biti dobavljeni niz predpona imena zaustavljenega posla; to zagotavlja funkcionalnost, podobno identifikatorju % opravila.

histarje

Dva ali tri znake, ki nadzorujejo širitev zgodovine in tokenizacijo (glej spodaj ZGODOVINSKA RAZŠIRJENOST ). Prvi znak je znak razširitve zgodovine, znak, ki signalizira začetek razširitve zgodovine, običajno ` ! ". Drugi znak je hitri nadomestitveni znak, ki se uporablja kot skrajšava za ponovni zagon prejšnjega ukaza, ki nadomesti en niz za drugega v ukazu. Privzeta vrednost je ` ^ '. Izbirni tretji znak je znak, ki označuje, da je preostanek vrstice komentar, če ga najdemo kot prvi znak besede, običajno ` # '. Značilnost komentarja zgodovine povzroči, da se zamenjava zgodovine preskoči za preostale besede v vrstici. To ne pomeni, da razčlenjevalnik lupine obravnava preostanek vrstice kot komentar.

Nizi

Bash ponuja enodimenzionalne spremenljivke nizov. Vsaka spremenljivka se lahko uporabi kot matrika; deklariraj zgrajen, bo izrecno razglasil matriko. Ni omejitve glede velikosti matrike, niti zahteve, da so člani indeksirani ali dodeljeni sosedno. Nizi se indeksirajo z integerji in temeljijo na nič.

Matrika se samodejno ustvari, če je katera koli spremenljivka dodeljena uporabi imena sintakse [ subscript ] = value . Inkript se obravnava kot aritmetični izraz, ki mora ovrednotiti na število, ki je večje ali enako nič. Če želite izrecno deklarirati matriko, uporabite ime deklaracije -a (glej spodaj SHELL BUILTIN COMMANDS ). declare -a ime [ subscript ] je prav tako sprejet; indeks se prezre. Atributi za mersko spremenljivko lahko podate z deklaracijo in samo enkrat. Vsak atribut velja za vse člane matrike.

Nizi so dodeljeni za uporabo dodeljenih sestavnih delov imena obrazca = ( vrednost 1 ... vrednost n ) , kjer je vsaka vrednost oblike [ subscript ] = string . Potreben je le niz . Če so priloženi dodatni oklepaji in indeksni indeksi, se temu indeksu dodeli; drugače je indeks dodeljenega elementa zadnji indeks, ki ga dodeli izjava plus ena. Indeksiranje se začne na nič. To sintakso sprejema deklaracija vgrajena. Elementi posamezne matrike se lahko dodelijo za uporabo imena [ subscript ] = sintaksa vrednosti, ki je navedena zgoraj.

Unset builtin se uporablja za uničenje nizov. unset name [ subscript ] uniči element matrike pri indeksnem indeksu. neveljavno ime , kjer je ime matrika ali unset ime [ subscript ], kjer je indeksni zapis * ali @ , odstranjuje celotno matriko.

Izjavljeni, lokalni in readonly zgrajeni posamezniki sprejmejo možnost -a za določitev matrike. Readed builtin sprejme možnost -a , da dodeli seznam besed, ki jih berete iz standardnega vhoda v matriko. Nastavi in razglasi zgrajene vrednosti prikaza matrike tako, da jih je mogoče ponovno uporabiti kot dodelitve.

RAZŠIRITEV

Razširitev se izvaja v ukazni vrstici, potem ko je razdeljena na besede. Izvedenih je sedem vrst razširitev: razširitev razširitve , širjenje tilde, razširitev spremenljivk , zamenjava ukazov , aritmetična ekspanzija , delitev besed in razširitev poti .

Vrstni red razširitev je razširitev razširitve, razširitev tilde, parametra, spremenljivka in aritmetična razširitev ter zamenjava ukazov (izvedena z leve proti desni), delitev besed in razširitev poti.

Na sistemih, ki ga lahko podpirajo, je na voljo dodatna širitev: zamenjava postopka .

Razširitev Brace

Razširitev Brace je mehanizem, s katerim se lahko generirajo poljubni nizi. Ta mehanizem je podoben razširitvi poti , vendar ustvarjena imena datotek ne obstajajo. Vzorci, ki jih je treba razširiti, imajo obliko neobvezne preambule , ki ji sledi niz zaporedij, ločenih z vejicami med parom zapestij, ki mu sledi neobvezen postscript . Preambula je prednastavljena za vsak niz, ki je vsebovan v oklepajih, nato pa se postscript dodaja vsakemu nastalemu nizu, ki se razširi levo v desno.

Razširitve Brace se lahko ugnezdijo. Rezultati vsakega razširjenega niza niso razvrščeni; ohranjen je vrstni red od leve proti desni. Na primer, { d, c, b } e se razširi v "ade ace abe".

Razširitev Brace se izvede pred vsemi drugimi razširitvami, v rezultatih pa ostanejo vsi znaki, ki so posebni drugim razširitvam. To je strogo besedilna. Bash ne uporablja sintaktične interpretacije konteksta razširitve ali besedila med zavitki.

Ta konstrukt se ponavadi uporablja kot skrajšana, ko je skupna predponica niza, ki se generira, daljša kot v zgornjem primeru:

mkdir / usr / local / src / bash / {staro, novo, dist, bugovi}

ali

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

Razširitev Brace uvaja rahlo nezdružljivost s preteklimi različicami sh . sh ne obravnava odprtin ali zapiral, posebej, ko se pojavijo kot del besede, in jih ohranja na izhodu. Bash odstranjuje zavore od besed kot posledica razširitve vezice. Na primer, beseda, vnesena v sh kot datoteka {1,2}, se na izhodu prikaže identično. Ista beseda se izpiše kot file1 file2 po razširitvi za bash . Če je zaželena stroga združljivost s sh , začnite z opcijo + B ali onemogočite razširitev vezij z možnostjo + B v nastavljeni ukaz (glej spodaj SHELL BUILTIN COMMANDS ).

Razširitev Tilde

Če se začne beseda z znakom tilde, ki ne podpiše znaka (` ~ '), se vse tiste znake, ki so pred prvo črko poševnice (ali vsi znaki, če ni črke, ki je nezakonita), štejejo za predpono tilde . Če niste navedli nobenega od znakov v predponu tilde, se znaki v tilde-predpono, ki sledijo tildi, obravnavajo kot morebitno prijavno ime . Če je to ime za prijavo nevelični niz, se tilda nadomesti z vrednostjo parametra lupine HOME . Če HOME ni nastavljen, namesto tega zamenja domači imenik uporabnika, ki izvaja lupino. V nasprotnem primeru se tilde-predpono nadomesti z domačim imenikom, ki je povezano z navedenim prijavnim imenom.

Če je tilde-predpono `~ + ', vrednost spremenljivke PWD ukazne lupine nadomešča predpono tilde. Če je predponica tilde "~ -", je vrednost spremenljivke lupine OLDPWD , če je nastavljena, zamenjan. Če so znaki, ki sledijo tilde v predponki tilde, sestavljeni iz števila N , ki je po izbiri predpono z znakom »+« ali »-«, se tilde-predpono nadomesti z ustreznim elementom iz sklada imenikov, kot bi bil prikazan z dirs builtin pozvan s tilde-predpono kot argument. Če so znaki, ki sledijo tilde v predponici tilde, sestavljeni iz številke brez vodilnih "+" ali "-", je predpostavljena "+".

Če je ime za prijavo neveljavno ali razširitev tilde ni uspešna, je beseda nespremenjena.

Vsaka določitev spremenljivke se preveri za tikte, ki ne kotirajo, takoj po : ali = . V teh primerih se izvaja tudi razširitev tilde. Zato lahko uporabite imena datotek z tildes v dodelitvah v PATH , MAILPATH in CDPATH , in lupina dodeli razširjeno vrednost.

Razširitev parametrov

Znak ` $ 'uvaja razširitev parametrov, zamenjavo ukazov ali aritmetično razširitev. Ime parametra ali simbol, ki ga je treba razširiti, se lahko priloži v zavihkih, ki so neobvezni, vendar služijo za zaščito spremenljivke, ki jo je treba razširiti, iz znakov, ki sledijo temu, kar se lahko razlaga kot del imena.

Ko se uporabijo oporniki, je ujemajoči zaključni nosilec prvi ` } 'ne ušel s poševnico ali znotraj navedenega niza in ne znotraj vgrajene aritmetične ekspanzije, zamenjave ukazov ali razširitve paramterja.

Vrednost parametra je zamenjana. Pritrdila so potrebna, kadar je parameter pozicijski parameter z več kot eno številko ali če temu sledi znak, ki ga ni treba razlagati kot del njenega imena.

V vsakem od spodnjih primerov beseda velja za razširitev tilde, razširitev parametrov, zamenjavo ukazov in aritmetično širitev. Če ne opravljate razširitve podnizov, preskusi bash za parameter, ki ni nastavljen ali neveljaven; izpuščanje debelega črevesa povzroči preizkus samo za parameter, ki ni nastavljen.

Uporabite privzete vrednosti . Če je parameter unset ali null, se razširitev besede nadomesti. V nasprotnem primeru se vrednost parametra nadomesti.

Dodeli privzete vrednosti . Če je parameter unset ali null, je razširitev besede dodeljena parametru . Vrednost parametra se nato nadomesti. Položajnim parametrom in posebnim parametrom se tako ne sme dodeliti.

Prikaz napake, če je Null ali Unset . Če je parameter neveljaven ali ni nastavljen, je razširitev besede (ali sporočila v ta namen, če beseda ni prisotna) zapisana v standardno napako in lupina, če ni interaktivna, zapusti. V nasprotnem primeru se vrednost parametra nadomesti.

Uporabite nadomestno vrednost . Če je parameter neveljaven ali ni nastavljen, se nič ne nadomesti, v nasprotnem primeru je zamenjava besede zamenjana.

Razširi na imena spremenljivk, katerih imena se začnejo s predpono , ločena s prvim znakom posebne spremenljivke IFS .

Dolžina znakov vrednosti parametra je zamenjana. Če je parameter * ali @ , je vrednost, ki je zamenjana, število pozicijskih parametrov. Če je parameter ime polja, ki ga indeksira * ali @ , je nadomestljena vrednost število elementov v matriki.

Beseda je razširjena, da proizvaja vzorec tako kot pri razširjanju poti. Če se vzorec ujema z začetkom vrednosti parametra , je rezultat razširitve razširjena vrednost parametra z najkrajšim vzorcem ujemanja (primer " # ") ali najdaljšim vzorcem ujemanja (" ## " "primer") črtano. Če je parameter @ ali * , se za vsak pozični parameter uporabi postopek odstranitve vzorca, razširitev pa je posledični seznam. Če je parameter spremenljivka matrike, ki je navzkrižna z @ ali * , pa se za vsakega člana matrike uporabi tudi postopek odstranitve vzorca, pri čemer je razširitev rezultat.

Beseda je razširjena, da proizvaja vzorec tako kot pri razširjanju poti. Če se vzorec ujema s končnim delom razširjene vrednosti parametra , je rezultat razširitve razširjena vrednost parametra z najkrajšim vzorcem ujemanja (primer » % «) ali najdaljšim vzorcem ujemanja (» % % "") izbrisano. Če je parameter @ ali * , se za vsak pozični parameter uporabi postopek odstranitve vzorca, razširitev pa je posledični seznam. Če je parameter spremenljivka matrike, ki je navzkrižna z @ ali * , pa se za vsakega člana matrike uporabi tudi postopek odstranitve vzorca, pri čemer je razširitev rezultat.

Vzorec je razširjen tako, da proizvaja vzorec tako kot pri razširjanju poti. Parameter je razširjen in najdaljša ujemanje vzorca z njeno vrednostjo se nadomesti z nizom . V prvi obliki je zamenjana le prva tekma. Druga oblika povzroči zamenjavo vseh ujemajočih se vzorcev z nizom . Če se vzorec začne z # , se mora ujemati na začetku razširjene vrednosti parametra . Če se vzorec začne z % , se mora ujemati na koncu razširjene vrednosti parametra . Če je niz nič, se ujemanje vzorcev izbriše in vzorec / naslednji se lahko izpusti. Če je parameter @ ali * , se za vsak pozični parameter uporabi substitucijska operacija, razširitev pa je posledični seznam. Če je parameter spremenljivka matrike, ki je vpisana z @ ali * , se zamenjava izvede za vsakega člana matrike in je razširitev rezultat.

Zamenjava ukaza

Zamenjava ukaza omogoča izhod ukaza, ki nadomesti ime ukaza. Obstajata dve obliki:

$ ( ukaz )

ali

` ukaz '

Bash izvaja razširitev tako, da izvrši ukaz in zamenja zamenjavo ukazov s standardnim izhodom ukaza, pri čemer so izbrisani novi vrstični znaki. Vdelane nove vrstice se ne izbrišejo, vendar jih je mogoče med delitvijo besed odstraniti. Zamenjavo ukazov $ ( datoteka cat ) lahko zamenjate z enakovredno, a hitrejšo $ (< file ).

Ko se uporabi staro nadomestna oblika nadomestitve, backslash ohranja svoj dobesedni pomen, razen če sledijo $ , ` , ali \ . Prvi povratni korak, ki mu ne sledi poševnica, konča zamenjavo ukazov. Pri uporabi obrazca $ ( ukaz ) vsi znaki med oklepaji sestavljajo ukaz; nobena se ne obravnava posebej.

Zamenjave ukazov so lahko ugnezdene. Če se pri uporabi pokončne oblike gnezdite, se izognite notranjim backquotes s poševnicami.

Če se zamenjava pojavlja v dvojnih narekovajih, rezultati rezultatov ne delujejo z besedo in razširitvijo poti.

Aritmetično razširitev

Aritmetična ekspanzija omogoča ovrednotenje aritmetičnega izraza in zamenjavo rezultata. Format za aritmetično širitev je:

$ (( izraz ))

Izraz se obravnava, kot da bi bil v dvojnih narekovajih, vendar se dvojni citat v oklepajih ne obravnava posebej. Vsi žetoni v izrazu so podvrženi razširjanju parametrov, razširitvi nizov, zamenjavi ukazov in odstranitvi citira. Aritmetične substitucije so lahko vgnezdene.

Vrednotenje se izvede v skladu s pravili, navedenimi spodaj pod ARITHMETIC EVALUATION . Če je izraz neveljaven, bash natisne sporočilo, ki kaže na napako, in ne pride do zamenjave.

Postopek zamenjave

Podpora procesom podpira sisteme, ki podpirajo imenovane cevi ( FIFO ) ali metodo / dev / fd za poimenovanje odprtih datotek. Ima obliko <( seznam ) ali > ( seznam ) . Seznam procesov se izvaja z vhodom ali izhodom, ki je povezan z datoteko FIFO ali drugo datoteko v / dev / fd . Ime te datoteke je kot posledica razširitve preneseno kot argument za trenutni ukaz. Če se uporabi obrazec (( seznam ) , bo pisanje v datoteko zagotovilo vnos za seznam . Če je uporabljen obrazec <( list ), je treba datoteko, ki je bila prenesena kot argument, prebrati, da bi dobili izhodni seznam .

Kadar je na voljo, se procesna substitucija izvaja hkrati s parametričnim in spremenljivim ekspanzijo, zamenjavo ukazov in aritmetično ekspanzijo.

Razdelitev besed

Lučka skenira rezultate razširitve parametrov, zamenjave ukazov in aritmetične ekspanzije, ki se niso pojavila v dvojnih narekov za razdelitev besed .

Lupina obravnava vsak znak IFS kot ločilo in razdeli rezultate drugih razširitev v besede na teh znakov. Če IFS ni nastavljen, ali je njegova vrednost točno , privzeto, potem je vsako zaporedje znakov IFS namenjeno razmejitvi besed. Če ima IFS drugačno vrednost kot privzeto, se na začetku in koncu besede ne upoštevata zaporedja prostora presledkov in zavihka , dokler je znak prazen v vrednosti IFS (znak IFS- ov presledek). Vsak znak v IFS, ki ni IFS presledek, skupaj s poljubnimi sosednjimi znaki IFS , omejuje polje. Zaporedje IFS barvnih znakov se obravnava tudi kot ločilo. Če je vrednost IFS nič, se ne pojavi nobena delitev besed.

Izrecni nični argumenti ( "" ali "' ) se ohranijo. Odstranjeni parametri, ki nimajo nobenih vrednosti, so odstranjeni iz implicitnih ničelnih argumentov, ki ne podpirajo. Če je parameter brez vrednosti razširjen v dvojnih narekovajih, se nulo argumenti ohranijo.

Upoštevajte, da če ne pride do ekspanzije, se ne izvaja cepitev.

Razširitev poti

Po razdelitvi besed, razen če je nastavljena možnost -f , bash skenira vsako besedo za znake * ,? , in [ . Če se pojavi eden od teh znakov, se beseda obravnava kot vzorec in se nadomesti z abecedno razvrščenim seznamom imen datotek, ki ustrezajo vzorcu. Če ne najdemo nobenih ustreznih imen datotek in nullglobna možnost lupine je onemogočena, ostane beseda nespremenjena. Če je nastavljena možnost nullglob in ni zadetkov, se beseda odstrani. Če je možnost lupine nocaseglob omogočena, se tekma izvaja brez upoštevanja abecednih znakov. Ko se vzorec uporablja za razširitev poti, mora biti znak "`. "" Na začetku imena ali takoj po poševnici izrecno ujemajoč, razen če je nastavljena možnost dotglob . Pri ujemanju poti ime mora biti koda črte vedno izrecno izravnana. V drugih primerih se znak "`. " Ne obravnava posebej. Oglejte si opis trgovine spodaj pod SHELL BUILTIN COMMANDS za opis možnosti nocaseglob , nullglob in dotglob shell.

Globoko spremenljivko GLOBIGNORE se lahko uporablja za omejitev nabor imen datotek, ki ustrezajo vzorcu . Če je nastavljen GLOBIGNORE , se vsako ujemajoče ime datoteke, ki se tudi ujema z enim od vzorcev v GLOBIGNORE , s seznama zadetkov odstrani. Imena datotek "`. "" In ".. .." se vedno prezrejo, tudi če je nastavljeno GLOBIGNORE . Vendar pa nastavitev GLOBIGNORE vpliva na možnost lupine dotglob , tako da se bodo ujemala vsa druga imena datotek, ki se začnejo s ».« . Da bi dobili staro obnašanje ignoriranja imen datotek, ki se začnejo z ``. '' , Naredite ``. * '' Eden od vzorcev v GLOBIGNORE . Možnost dotglob je onemogočena, če GLOBIGNORE ni nastavljen.

Ujemanje vzorcev

Vsak znak, ki se pojavi v vzorcu, razen spodnjih spodnjih znakov, se ujema z. Znak NUL se ne sme pojaviti v vzorcu. Posebne znake vzorca je treba navesti, če jih je treba ujemati dobesedno.

Posebni znaki vzorca imajo naslednji pomen:

*

Ujema vsak niz, vključno z ničelnim nizom.

?

Ujema vsak posamezen znak.

[...]

Ujema z enim od zaprtih znakov. Par znakov, ločenih s crtom, označuje izrazni obseg ; se ujema z vsemi znaki, ki se razlikuje med tema dvema znakoma, in sicer z uporabo trenutnega zbirnega zaporedja in nabora znakov. Če je prvi znak, ki sledi [ je ! ali ^ potem se ujemajo vsi znaki, ki niso zaprti. Vrstni red razvrščanja znakov v izrazih razdalja določa trenutni jezik in vrednost spremenljivke lupine LC_COLLATE , če je nastavljena. A - se lahko ujema z vključitvijo kot prvi ali zadnji znak v nizu. A ] se lahko ujema z vključitvijo prvega znaka v niz.

V [ in ] se razredi znakov lahko določijo s sintakso [: class :] , kjer je razred ena od naslednjih razredov, definiranih v standardu POSIX.2:

alnum alpha ascii prazno cntrl cifro graf spodnji tisk punct prostor zgornja beseda xdigit
Razred znakov se ujema z znakom, ki pripadajo temu razredu. Klicni znak besede ujema črke, števke in znak _.

V [ in ] je razred enakovrednosti mogoče določiti s sintakso [= c =] , ki se ujema z vsemi znaki z isto skupino teže (kot je opredeljena v trenutnem jeziku) kot znak c .

V [ in ] sintakso [. simbol .] ustreza simbolu simbolov za primerjavo.

Če je možnost extglob shell omogočena z uporabo shopt builtin, se prepozna več operaterjev za razširitev vzorec. V naslednjem opisu je seznam vzorcev seznam enega ali več vzorcev, ločenih z | . Sestavljeni vzorci se lahko oblikujejo z uporabo enega ali več naslednjih podvzorcev:

? ( seznam vzorcev )

Ujema nič ali en pojav danih vzorcev

* ( seznam vzorcev )

Ujema nič ali več pojavov danih vzorcev

+ ( seznam vzorcev )

Ujema z enim ali več pojavi danih vzorcev

@ ( seznam vzorcev )

Ujema se natančno z enim od danih vzorcev

! ( seznam vzorcev )

Vsebuje vse, razen enega od danih vzorcev

Citat Removal

Po prejšnjih razširitvah so odstranjeni vsi vsi dogodki, ki niso bili uvrščeni na seznam znakov \ , ' in ', ki niso bili rezultat ene od zgornjih razširitev.

REDIRECTION

Pred izvedbo ukaza se lahko njegov vhod in izhod preusmeri s posebnim zapisom, ki ga razlaga lupina. Preusmeritev se lahko uporablja tudi za odpiranje in zapiranje datotek za trenutno okolje za izvajanje ukazne lupine. Naslednji operaterji preusmeritve so lahko pred ali prikazani kjerkoli v preprostem ukazu ali pa lahko sledijo ukazu . Preusmeritve se obdelajo v vrstnem redu, ki se prikaže, od leve proti desni.

V naslednjih opisih, če je številka deskriptorja datoteke izpuščena, in prvi znak operaterja preusmeritve je < , preusmeritev se nanaša na standardni vhod (deskriptor datoteke 0). Če je prvi znak operaterja za preusmeritev >> , se preusmeritev nanaša na standardni izhod (datotečni deskriptor 1).

Beseda, ki sledi operaterju preusmerjanja v naslednjih opisih, razen če ni drugače navedeno, se podvrže razširitvi veznikov, razširitvi tilde, razširitvi parametrov, zamenjavi ukazov, aritmetični ekspanziji, odstranitvi ponudb, razširitvi poti in razcepitvi besed. Če se razširi na več kot eno besedo, bash poroča o napaki.

Upoštevajte, da je vrstni red preusmeritev pomemben. Na primer ukaz

ls > dirlist 2 > & 1

usmerja standardni izhod in standardno napako v datoteko dirlist , medtem ko ukaz

ls 2 > & 1 > dirlist

usmerja samo standardni izhod v datoteko dirlist , ker je bila standardna napaka podvojena kot standardni izhod, preden je bil standardni izhod preusmerjen na dirlist .

Bash obravnava več imen datotek posebej, kadar se uporabljajo pri preusmeritvah, kot je opisano v naslednji tabeli:

/ dev / fd / fd

Če je fd veljavno celo število, se datoteka deskriptor fd podvoji.

/ dev / stdin

Deskriptor datoteke 0 je podvojen.

/ dev / stdout

Datotekni opis 1 je podvojen.

/ dev / stderr

Deskriptor datoteke 2 je podvojen.

/ dev / tcp / host / port

Če je gostitelj veljavno ime gostitelja ali internetni naslov, pristanišče pa je celo število vrat ali ime storitve, bash poskuša odpreti povezavo TCP z ustrezno vtičnico.

/ dev / udp / gostitelj / pristanišče

Če je gostitelj veljavno ime gostitelja ali internetni naslov, pristanišče pa je celo število vrat ali ime storitve, bash poskuša odpreti povezavo UDP z ustrezno vtičnico.

Neuspeh pri odpiranju ali ustvarjanju datoteke povzroči, da preusmeritev ne uspe.

Preusmerjanje vnosa

Preusmeritev vnosa povzroči, da je datoteka, katere ime je posledica razširitve besede, ki se odpre za branje na deskriptorju datoteke, ali standardni vhod (deskriptor datoteke 0), če n ni podan.

Splošna oblika preusmerjanja vnosa je:

[ n ] < beseda

Preusmeritev izhoda

Preusmeritev izhoda povzroči, da je datoteka, katere ime je posledica razširitve besede, ki jo je treba odpreti za pisanje na deskriptorju datoteke n , ali standardni izhod (deskriptor datoteke 1), če n ni podan. Če datoteka ne obstaja, je ustvarjena; če obstaja, je skrajšana na ničelno velikost.

Splošni format za preusmeritev izhoda je:

[ n ] > besedo

Če je preusmeritev operaterja > in je omogočena možnost noclobber za nastavljeno vgrajeno, preusmeritev ne uspe, če je datoteka, katere ime je rezultat razširitve besede , in je redna datoteka. Če je preusmeritev operaterja > | , ali pa je preusmeritev operaterja > in možnost noclobber do nastavljenega vgrajenega ukaza ni omogočena, se preusmeritev poskusi, tudi če datoteka obstaja po besedah .

Dodajanje preusmerjenega izhoda

Preusmeritev proizvodnje na ta način povzroči, da datoteka, katere ime izhaja iz razširitve besede, ki jo želite odpreti za dodajanje datoteke deskriptorja n , ali standardni izhod (opisni dokument datoteke 1), če n ni podan. Če datoteka ne obstaja, je ustvarjena.

Splošni format za dodajanje rezultatov je:

[ n ] >> beseda

Preusmeritev standardnega izhoda in standardne napake

Bash omogoča standardni izhod (datotečni deskriptor 1) in izhod standardne napake (deskriptor datoteke 2), ki se preusmeri v datoteko, katere ime je razširitev besede s tem konstruktom.

Obstajata dva formata za preusmeritev standardnega izhoda in standardne napake:

&> beseda

in

> & beseda

Od obeh oblik je prednostna prva. To je semantično enakovredno

> beseda 2 > & 1

Tukaj dokumenti

Ta vrsta preusmeritve ukazuje lupini, da bere vnos iz trenutnega vira, dokler ni vidna vrstica, ki vsebuje samo besedo (brez sledi). Vse vrstice, ki se preberejo do te točke, se nato uporabijo kot standardni vhod za ukaz.

Oblika dokumentov je:

<< [ - ] besedno razmejitev besedila

Na besedo se ne izvaja nobena širitev parametra, zamenjava ukazov, aritmetična ekspanzija ali razširitev poti. Če so citirani vsi znaki v besedilu , je razmejitev rezultat odstranitve citatov na besedo , vrstice v dokumentu tukaj pa niso razširjene. Če je beseda nekotirajoča, so vse vrstice dokumenta tukaj podvržene razširjanju parametrov, zamenjavi ukazov in aritmetični ekspanziji. V slednjem primeru se zaporedje znakov \ ne upošteva in \ je treba uporabiti za navedbo znakov \ , $ in ` .

Če je preusmeritveni operater << - , so vsi vodilni jezički znaki odstranjeni iz vhodnih linij in vrstice, ki vsebuje razmejitev . To omogoča, da se dokumenti v skripti lupine narišejo naravno.

Tukaj strune

Različica tukaj dokumentov, oblika je:

<<< beseda

Beseda je razširjena in dobljena v ukazu s standardnim vhodom.

Podvajanje deskriptorjev datotek

Preusmeritev operaterja

[ n ] <& beseda

se uporablja za podvajanje deskriptorjev vhodne datoteke. Če se beseda razširi na eno ali več številk, se deskriptor datoteke, označen z n , naredi kot kopija tega deskriptorja datoteke. Če številke v besedo ne določajo deskriptorja datoteke, odprtega za vnos, pride do napake pri preusmeritvi. Če beseda oceni - , je deskriptor n zaprt. Če n ni podan, se uporabi standardni vhod (deskriptor datoteke 0).

Upravljavec

[ n ] > & beseda

se uporablja podobno kot podvojene deskriptorje izhodne datoteke. Če n ni podan, se uporabi standardni izhod (deskriptor datoteke 1). Če številke v besedilu ne določajo deskriptorja datoteke, ki je odprt za izhod, se pojavi napaka za preusmeritev. Kot poseben primer, če je n izpuščen in se beseda ne razširi na eno ali več števk, se standardni izhod in standardna napaka preusmeri, kot je opisano prej.

Premikanje deskriptorjev datotek

Preusmeritev operaterja

[ n ] <& številka -

premakne oznako deskriptorja datoteke v descriptor datoteke n ali standardni vhod (deskriptor datoteke 0), če n ni podan. Številka je zaprta, potem ko se podvoji na n .

Podobno je preusmeritev operaterja

[ n ] > in številka -

premakne oznako deskriptorja datoteke v descriptor n ali standardni izhod (deskriptor datoteke 1), če n ni podan.

Odpiranje deskriptorjev datotek za branje in pisanje

Preusmeritev operaterja

[ n ] <> besedo

povzroči datoteko, katere ime je razširitev besede, ki se odpre za branje in pisanje na deskriptorju datoteke n ali na deskriptorju datoteke 0, če n ni podan. Če datoteka ne obstaja, je ustvarjena.

ALIASE

Aliases dovoljujejo, da se niz nadomesti z besedo, ko se uporablja kot prva beseda preprostega ukaza. Lupina ohranja seznam vzdevkov, ki jih lahko nastavite in jih ne nastavite z ukazoma alias in built- in ukazi (glej spodaj SHELL BUILTIN COMMANDS ). Prva beseda vsakega ukaza, če je nekotirajoča, se preveri, ali ima vzdevek. Če je tako, se ta beseda nadomesti z besedilom vzdevka. Ime vzdevka in nadomestno besedilo lahko vsebujeta kakršen koli veljaven vnos lupine, vključno z zgoraj navedenimi metačnimi znaki , z izjemo, da ime vzdevka ne sme vsebovati = . Prva beseda nadomestnega besedila je preizkušena za vzdevke, vendar se beseda, ki je identična vzdevku, ki se razširja, še ni razširila. To pomeni, da lahko na primer en alias ls -F , na primer, in bash ne poskuša rekurzivno razširiti nadomestnega besedila. Če je zadnji znak vrednosti za vzdevek prazen , se naslednja ukazna beseda po vzdevku preveri tudi za razširitev vzdevka.

Aliasi se ustvarijo in navedejo z ukazom alias in se odstranijo z ukazom unalias .

V nadomestnem besedilu ni mehanizma za uporabo argumentov. Če so potrebni argumenti, uporabite funkcijo lupine (glej FUNCTIONS spodaj).

Podsistemi se ne razširijo, ko lupina ni interaktivno, razen če je opcija shell_aliases nastavljena z uporabo shopt (glej opis shopt pod SHELL BUILTIN COMMANDS spodaj).

Pravila o opredelitvi in ​​uporabi vzdevkov so nekoliko zmedena. Bash vedno bere vsaj eno celotno vrstico vnosa, preden izvede katerikoli ukaz v tej vrstici. Podsistemi se razširijo, ko se bere ukaz, ne pa, ko se izvrši. Zato se definicija vzdevka, ki se pojavlja v isti vrstici kot drugi ukaz, ne začne veljati, dokler se ne prebere naslednja vrstica vnosa. Nov vzdevek ne vpliva na ukaze, ki sledijo opredelitvi vzdevka na tej vrstici. To vedenje je tudi težava, ko se funkcije izvajajo. Vzdevki se razširijo, ko se prebere definicija funkcije, ne pa, ko se funkcija izvrši, ker je definicija funkcij sam sestavljen ukaz. Posledično so vzdevki, opredeljeni v funkciji, na voljo, dokler se funkcija ne izvede. Da bi bili varni, vedno ločite definicije vzdevka na ločeno vrstico in ne uporabite vzdevka v sestavljenih ukazih.

Za skoraj vsak namen, vzdevke nadomeščajo funkcije lupine.

FUNKCIJE

Funkcija lupine, definirana kot je opisana zgoraj v razdelku SHELL GRAMMAR , hrani serijo ukazov za kasnejšo izvedbo. Ko se ime lupinske funkcije uporablja kot preprosto ime ukaza, se izvrši seznam ukazov, povezanih s tem imenom funkcije. Funkcije se izvajajo v kontekstu trenutne lupine; za njihovo razlago ni ustvarjen noben nov proces (to je v nasprotju z izvedbo lupinskega skripta). Ko se funkcija izvrši, argumenti v funkciji postanejo pozicijski parametri med njegovo izvedbo. Posebni parameter # je posodobljen, da odraža spremembo. Pozicijski parameter 0 je nespremenjen. Spremenljivka FUNCNAME je nastavljena na ime funkcije, medtem ko se funkcija izvaja. Vsi ostali vidiki okolja za izvajanje ukazne lupine so enaki med funkcijo in njegovim klicateljem, z izjemo, da je past DEBUG (glej opis zgrajene past pod SHELL BUILTIN COMMANDS spodaj) ne podeduje, razen če je bila funkcija dodeljena atributu sledi ( glej opis prijavljenega vgrajenega spodaj).

Spremenljivke, ki so lokalnim funkcijam, se lahko razglasijo z lokalno vgrajenim ukazom. Običajno se spremenijo spremenljivke in njihove vrednosti med funkcijo in njegovim klicateljem.

Če se v funkciji izvede vračanje vgrajenega ukaza, se funkcija zaključi in izvedba se nadaljuje z naslednjim ukazom po klicu funkcije. Ko se funkcija konča, se vrednosti pozicijskih parametrov in posebnega parametra # povrnejo na vrednosti, ki so jih imele pred izvedbo funkcije.

Imena in definicije funkcij so lahko navedene z opcijo -f v ukazih declare ali typeet builtin. Funkcija -F za prijavo ali postavitev navede samo imena funkcij. Funkcije se lahko izvozijo tako, da se podvrste samodejno določijo z opcijo -f za vgrajeni izvoz .

Funkcije so lahko rekurzivne. Na število rekurzivnih klicev ne velja omejitev.

ARITVETSKA OCENA

Lupina omogoča aritmetične izraze v določenih okoliščinah (glej ukaz zgrajenin in aritmetično razširitev ). Vrednotenje se opravi v celicah s fiksno širino brez preverjanja pretoka, čeprav je delitev z 0 ujeta in označena kot napaka. Operaterji in njihova prednost in asociativnost sta enaka kot v jeziku C. Naslednji seznam operaterjev je združen v ravni operaterjev enake prednostne naloge. Vrednosti so navedene po padajočem vrstnem redu.

id ++ id -

spremenljiv post-inkrement in post-dekretiranje

++ id - id

spremenljiv pred-inkrement in predkrajšek

- +

unary minus in plus

! ~

logična in bitna negacija

**

eksponentiacija

* /%

razmnoževanje, delitev, preostanek

+ -

dodatek, odštevanje

<< >>

levi in ​​desni bitni premiki

<=> = <>

primerjava

==! =

enakost in neenakost

&

bitno IN

^

bitno ekskluzivno ALI

|

bitno OR

&&

logično AND

||

logično ALI

expr ? Izraz : expr

pogojno vrednotenje

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

dodelitev

expr1 , expr2

vejice

Spremenljivke Shell so dovoljene kot operandi; Razširitev parametrov se izvede pred vrednotenjem izraza. V izrazu se lahko spremenljivke lupine sklicujejo tudi na ime brez uporabe sintakse za razširitev parametrov. Vrednost spremenljivke se oceni kot aritmetični izraz, ko je navedena. Pri spremenljivki lupine ni potrebno, da je v izrazu vklopljen njegov atribut celo število.

Konstante z vodilnim 0 se razlagajo kot oktalne številke. Vodilni 0x ali 0X označuje heksadecimalno. V nasprotnem primeru so številke v obliki [ base # ] n, kjer je osnova decimalno število med 2 in 64, ki predstavlja aritmetično osnovo, in n je število v tej bazi. Če je osnova # izpuščena, se uporabi osnova 10. Številke, večje od 9, so majhne črke, velike črke, @ in _ v tem vrstnem redu. Če je osnova manjša ali enaka 36, ​​se lahko male in velike črke uporabijo zamenljivo, da predstavljajo številke med 10 in 35.

Operaterji se ovrednotijo ​​po vrstnem redu. Pod-izrazi v oklepajih se najprej ocenijo in lahko razveljavijo zgoraj navedena pravila o prednostih.

POGOJNI IZRAZI

Pogojne izraze uporabijo ukaz [[ compound command in test in [ builtin commands za testiranje atributov datotek in izvajanje nizov in aritmetičnih primerjav. Izrazi so sestavljeni iz naslednjih enotnih ali binarnih primarnih. Če je kateri koli datotečni argument za enega od primarnih oblik oblike / dev / fd / n , se preveri datoteka deskriptor n . Če je argument za datoteko enemu izmed primarnih elementov eden izmed / dev / stdin , / dev / stdout ali / dev / stderr , se označi datotečni deskriptor 0, 1 ali 2.

- datoteka

Res je, če obstaja datoteka .

-b datoteka

Res je, če obstaja datoteka in je posebna datoteka bloka.

-c datoteko

Res je, če obstaja datoteka in je posebna datoteka s posebnim znanjem.

-d datoteko

Res je, če obstaja datoteka in je mapa.

- datoteka

Res je, če obstaja datoteka .

-f datoteke

Res je, če obstaja datoteka in je redna datoteka.

-g datoteko

Res je, če obstaja datoteka in je nastavljena na skupino id.

-h datoteko

Res je, če obstaja datoteka in je simbolična povezava.

-k datoteka

Res je, če obstaja datoteka in je nastavljen njen lepljiv bit.

-p datoteko

Res je, če obstaja datoteka in je poimenovana cev (FIFO).

-r datoteka

Res je, če datoteka obstaja in je berljiva.

-s datoteke

Res je, če datoteka obstaja in ima velikost večjo od nič.

-t fd

Res je, če je datoteka deskriptor fd odprta in se nanaša na terminal.

-u datoteko

Res je, če obstaja datoteka in nastavljen je bit set-user-id.

-w datoteko

Res je, če datoteka obstaja in jo je mogoče zapisati.

-x datoteka

Res je, če datoteka obstaja in je izvedljiva.

O datoteko

Res je, če obstaja datoteka in je v lasti učinkovitega uporabniškega ID-ja.

-G datoteko

Res je, če obstaja datoteka in je v lasti učinkovitega ID-ja skupine.

-L datoteko

Res je, če obstaja datoteka in je simbolična povezava.

-S datoteko

Res je, če obstaja datoteka in je vtičnica.

-N datoteko

Res je, če datoteka obstaja in je bila spremenjena od zadnjega branja.

file1 - nt file2

Res je, če je datoteka1 novejša (glede na datum spremembe) kot datoteka2 ali če datoteka1 obstaja in datoteka2 ne.

file1 - ot file2

Res je, če je datoteka1 starejša od datoteke2 ali če datoteka2 obstaja in datoteka1 ne.

file1 -ef file2

Res je, če se datoteka1 in datoteka2 nanašata na iste številke naprav in inode.

- optimum ime

Res je, če je omogočena možnost optičnega imena ukazne lupine. Oglejte si seznam možnosti pod opisom možnosti -o v nizu, ki je vgrajen spodaj.

-z niz

Res je, če je dolžina niza nič.

-N- string

niz

Res je, če je dolžina niza ničelna.

string1 == niz2

Res je, če so nizi enaki. = se lahko uporabi namesto == za strogo skladnost s POSIX.

string1 ! = niz2

Res je, če nizi niso enaki.

string1 < niz2

Resnično, če vrstica1 sortira pred vrstico 2 v leksikografskem jeziku v trenutnem jeziku.

string1 > string2

Resnično, če string1 po vrstici string2 leksikografsko v trenutnem jeziku.

arg1 OP arg2

OP je eden od -eq , -ne , -lt , -le , -gt ali -ge . Ti aritmetični binarni operaterji vrnejo true, če je arg1 enak, ni enak, manj kot, manjši ali enak, večji od ali enak ali višji od arg2 . Arg1 in arg2 sta lahko pozitivna ali negativna cela števila.

Enostavna razširitev komande

Ko se izvrši preprost ukaz, lupina opravi naslednje razširitve, dodelitve in preusmeritve, od leve proti desni.

1.Za besede, ki jih je razčlenjevalnik označil kot spremenljive naloge (tiste, ki so pred ime ukaza), in za preusmeritve so shranjene za kasnejšo obdelavo.

2. Besede, ki niso spremenljive naloge ali preusmeritve, so razširjene. Če katera koli beseda ostane po razširitvi, se prva beseda šteje za ime ukaza, preostale besede pa so argumenti.

3.Redirections se izvajajo, kot je opisano zgoraj pod REDIRECTION .

4. Besedilo po = v vsaki dodelitvi spremenljivke pretvori razširitev tilde, razširitev parametrov, zamenjavo ukazov, aritmetično ekspanzijo in odstranitev ponudb, preden se dodeli spremenljivki.

Če ne pride do nobenega imena ukaza, dodeljene spremenljivke vplivajo na trenutno okolje okolja. V nasprotnem primeru se spremenljivke dodajo v okolje izvršenega ukaza in ne vplivajo na trenutno okolje okolja. Če katera od dodelitev poskuša dodeliti vrednost spremenljivki za branje, se zgodi napaka in ukaz zapusti z ničelnim statusom.

Če ni rezultatov ukaza, se izvedejo preusmeritve, vendar ne vplivajo na trenutno okolje okolja. Napaka preusmeritve povzroči, da ukaz zapusti z ničelnim statusom.

Če po razširitvi pride do ukaznega imena, se izvedba nadaljuje, kot je opisano spodaj. V nasprotnem primeru ukaz zapusti. Če je ena od razširitev vsebovala zamenjavo ukazov, je izhodni status ukaza izhodni status zadnje zamenjave ukaza. Če ni bilo zamenjave ukazov, ukaz zapusti s statusom nič.

IZVRŠITEV KOMAND

Ko je ukaz razdeljen na besede, če ima za posledico preprost ukaz in izbirni seznam argumentov, se izvedejo naslednja dejanja.

Če ime ukaza ne vsebuje poševnic, ga lupina poskuša najti. Če s tem imenom obstaja funkcija ukazne lupine, se ta funkcija prikliče, kot je opisano zgoraj v FUNCTIONS . Če se ime ne ujema s funkcijo, jo lupina išče na seznamu vgrajenih lupin. Če se najde tekmo, se vnese ta vgrajen.

Če ime ni niti funkcija lupine niti zgrajena in ne vsebuje poševnic, bash išče vsak element PATH za imenik, ki vsebuje to izvedeno datoteko. Bash uporablja tabelo hash, da zapomni celotne poti imenovanih datotek (glej spodaj pod SHELL BUILTIN COMMANDS spodaj). Popolno iskanje imenikov v PATHu se izvede samo, če ukaz ni v razpredelnici razpršitve. Če je iskanje neuspešno, lupina natisne sporočilo o napaki in vrne status izhoda 127.

Če je iskanje uspešno, ali če ime ukaza vsebuje eno ali več črtic, lupina izvede imenovan program v ločenem okolju izvajanja. Argument 0 je nastavljen na dano ime, preostali argumenti pa so nastavljeni na podane argumente, če obstajajo.

Če ta izvršitev ne uspe, ker datoteka ni v izvedljivi obliki, datoteka pa ni mapa, se domneva, da je lupinski skript , datoteka, ki vsebuje ukaze lupine. Podsklop se vzpostavi za izvršitev. Ta podniz se ponovno inicializira, tako da je učinek tako, kot da bi bila sklicana nova lupina za ravnanje s skriptom, z izjemo, da otroka ohrani kraje ukazov, ki jih je starši zapomnil (glej spodaj spodaj pod SHELL BUILTIN COMMANDS ).

Če je program datoteka, ki se začne z #! , preostanek prve vrstice pa določa tolmač za program. Lupina izvede določen tolmač v operacijskih sistemih, ki sami ne obdelujejo te izvedbene oblike. Argumenti tolmaču sestavljajo en opcijski argument, ki sledi imenu tolmača v prvi vrstici programa, ki ji sledi ime programa, čemur sledijo ukazni argumenti, če obstajajo.

OKOLJSKO IZVRŠEVANJE OKOLJE

Ovojnica ima izvedbeno okolje , ki je sestavljeno iz naslednjega:

* odprite datoteke, ki jih poda ukazna lupina, ki jo poda ukazna lupina, spremenjeno s preusmeritvami, ki so bile dobavljene v ukazu exec builtin

* trenutni delovni imenik, kot ga je določil cd , pushd ali popd , ali ga podeduje lupina ob pozivu

* masko načina ustvarjanja datotek, kot jo je določil umask ali podedoval od staršev ukazne lupine

* trenutne pasti, ki jih določi past

* parametri lupine, ki so nastavljeni z dodelitvijo spremenljivke ali z nastavljeno ali podedovano od staršev lupine v okolju

* funkcije lupine, določene med izvajanjem ali podedovane od staršev lupine v okolju

* Možnosti so bile omogočene pri pozivu (privzeto ali z argumenti v ukazni vrstici) ali nastavljeno

* možnosti, ki jih je omogočil shopt

* vzdevki lupine, definirani z vzdevkom

* različne ID-je procesov, vključno s tistimi v ozadju delovnih mest, vrednostjo $$ in vrednostjo $ PPID

Ko je treba izvršiti preprost ukaz, ki ni zgrajena funkcija ali ukazna lupina, se sklicuje v ločeno izvedbeno okolje, ki je sestavljeno iz naslednjega. Če ni drugače navedeno, so vrednosti podedovane iz lupine.

* odprtih datotek lupine, vključno z vsemi spremembami in dodatki, ki jih določijo preusmeritve v ukaz

* trenutni delovni imenik

* maska ​​načina ustvarjanja datotek

* spremenljivke lupine, označene za izvoz, skupaj s spremenljivkami, ki se izvažajo za ukaz, se prenesejo v okolje

* pasti, ki jih ujame lupina, se ponastavijo na vrednosti, ki so podedovane od staršev lupine, in pasti, ki jih zanemarijo pasti, se ne upoštevajo

Ukaz v tem ločenem okolju ne more vplivati ​​na okolje izvajanja ukazne lupine.

Zamenjava ukazov in asinhroni ukazi se skličejo v okolju podvozja, ki je dvojnik okolja okolja, razen, da se pasti, ki jih ujame lupina, ponastavijo na vrednosti, ki jih je lupina podedovala od svojih staršev pri pozivu. Vgrajeni ukazi, ki se sklicujejo kot del plinovoda, se prav tako izvajajo v okolju podvozja. Spremembe v okolju podnožje ne morejo vplivati ​​na okolje izvajanja lupine.

Če ukazu sledi ukaz & & job control ni aktiven, je privzeti standardni vhod za ukaz prazna datoteka / dev / null . V nasprotnem primeru se ukaz, ki se sklicuje, podeduje deskriptorje datoteke klicne lupine, ki jih spreminjajo preusmeritve.