Bash - comandă Linux - comandă Unix

NUME

bash - GNU Bourne-Again Shell

REZUMAT

bash [opțiuni] [fișier]

DESCRIERE

Bash este un interpretor de limbaj de comandă compatibil cu sh, care execută comenzi citite din intrarea standard sau dintr-un fișier. Bash include, de asemenea, caracteristici utile din cochilii Korn și C ( ksh și csh ).

Bash este destinat să fie o implementare conformă a specificației IEEE POSIX Shell and Tools (Grupul de lucru IEEE 1003.2).

OPȚIUNI

În plus față de opțiunile coajă unicate documentate în descrierea setului de comenzi încorporate, bash interpretează următoarele opțiuni atunci când este invocată:

-c șir

Dacă opțiunea -c este prezentă, atunci comenzile sunt citite din șir . Dacă există argumente după șir , acestea sunt atribuite parametrilor poziționali, începând cu $ 0 .

-i

Dacă opțiunea -i este prezentă, shell-ul este interactiv .

-l

Faceți bash - ul ca și cum ar fi fost invocat ca o coajă de conectare (vedeți INVOCATION de mai jos).

-r

Dacă opțiunea -r este prezentă, shell-ul devine restricționat (a se vedea RESTRICTED SHELL de mai jos).

-s

Dacă opțiunea -s este prezentă sau dacă nu există argumente după prelucrarea opțiunii, atunci comenzile sunt citite din intrarea standard. Această opțiune permite setarea parametrilor poziționali la invocarea unei cochilii interactive.

-D

O listă a tuturor șirurilor dublu-cotate precedate de $ este tipărită pe extrasul standard. Acestea sunt șirurile care sunt supuse traducerii limbajului atunci când localizarea actuală nu este C sau POSIX . Aceasta implică opțiunea -n ; nu vor fi executate comenzi.

[-] O [ shopt_option ]

shopt_option este una dintre opțiunile shell acceptate de builtin- ul shopt (a se vedea SHELL BUILTIN COMMANDS de mai jos). Dacă opțiunea shopt_option este prezentă, -O setează valoarea acelei opțiuni; + O elimină. Dacă opțiunea shopt_option nu este furnizată, numele și valorile opțiunilor shell acceptate de shopt sunt tipărite pe ieșirea standard. Dacă opțiunea de invocare este + O , ieșirea este afișată într-un format care poate fi refolosit ca intrare.

-

A - semnalează sfârșitul opțiunilor și dezactivează procesarea suplimentară a opțiunilor. Orice argumente după - sunt tratate ca nume de fișiere și argumente. Un argument de - este echivalent cu - .

Bash interpretează și un număr de opțiuni cu mai multe caractere. Aceste opțiuni trebuie să apară pe linia de comandă înainte ca opțiunile cu un singur caracter să fie recunoscute.

--dump-po-siruri de caractere

Echivalentă cu -D , dar ieșirea este în formatul de fișier GNU gettext po (obiect portabil).

--dump-siruri de caractere

Echivalent cu -D .

--Ajutor

Afișați un mesaj de utilizare pe ieșirea standard și ieșiți cu succes.

- fișierul de fișier inițial

- fișierul rcfile

Executați comenzi din fișier în loc de fișierul de inițializare standard ~ / .bashrc dacă shell-ul este interactiv (vedeți INVOCATION de mai jos).

--Logare

Echivalent cu -l .

--noediting

Nu utilizați biblioteca GNU readline pentru a citi liniile de comandă atunci când shell-ul este interactiv.

--noprofile

Nu citiți fișierul de pornire la nivel de sistem / etc / profile sau niciunul din fișierele de inițializare personale ~ / .bash_profile , ~ / .bash_login sau ~ / .profile . În mod implicit, bash citește aceste fișiere atunci când este invocată ca o coajă de conectare (vedeți INVOCATION de mai jos).

--norc

Nu citiți și executați fișierul de inițializare personală ~ / .bashrc dacă shell-ul este interactiv. Această opțiune este activată în mod implicit dacă shell-ul este invocat ca sh .

--posix

Modificați comportamentul bash în cazul în care operația implicită diferă de standardul POSIX 1003.2 pentru a se potrivi cu standardul ( modul posix ).

--restricted

Cochiliul devine restricționat (a se vedea RESTRICTED SHELL de mai jos).

--rpm-necesită

Produceți lista fișierelor necesare pentru ca scriptul shell să se execute. Aceasta implică "-n" și este supusă acelorași limitări ca și verificarea verificării erorilor de timp de compilare; Backticks, [] testele și evals nu sunt analizate, astfel încât unele dependențe pot fi ratate. --verbose Echivalent cu -v .

--versiune

Afișați informațiile despre versiunea pentru acest exemplu de bash pe ieșirea standard și ieșiți cu succes.

ARGUMENTE

Dacă argumentele rămân după prelucrarea opțiunii și nici opțiunea -c, nici -s nu a fost furnizată, primul argument este presupus a fi numele unui fișier care conține comenzi pentru shell. În cazul în care bash este invocat în acest mod, $ 0 este setat la numele fișierului, iar parametrii poziționali sunt setați la argumentele rămase. Bash citește și execută comenzi din acest fișier, apoi iese. Starea de ieșire a lui Bash este starea de ieșire a ultimei comenzi executate în script. Dacă nu se execută nici o comandă, starea de ieșire este 0. O încercare este făcută mai întâi pentru a deschide fișierul din directorul curent și, dacă nu se găsește niciun fișier, atunci shell-ul caută directoarele din PATH pentru script.

INVOCARE

O coajă de conectare este cea a cărei primul caracter al argumentului zero este un - sau unul care începe cu opțiunea --login .

O coajă interactivă este una pornită fără argumente non-opționale și fără opțiunea -c a cărei intrare și ieșire standard sunt conectate la terminale (așa cum este determinată de isatty (3)) sau una pornită cu opțiunea -i . PS1 este setat și $ - include i dacă bash este interactiv, permițând un script shell sau un fișier de pornire pentru a testa această stare.

Următoarele paragrafe descriu modul în care bash execută fișierele de pornire. Dacă oricare dintre fișiere există, dar nu poate fi citit, bash raportează o eroare. Tildele sunt extinse în nume de fișiere așa cum este descris mai jos sub extensia Tilde în secțiunea EXPANSION .

Atunci când bash este invocat ca o coajă de conectare interactivă sau ca o shell non-interactivă cu opțiunea -login , ea citește și execută mai întâi comenzi din fișierul / etc / profile , dacă acel fișier există. După citirea fișierului, acesta caută ~ / .bash_profile , ~ / .bash_login și ~ / .profile , în ordinea respectivă, și citește și execută comenzi de la primul care există și este lizibil. Opțiunea - noprofile poate fi utilizată atunci când shell-ul începe să inhibe acest comportament.

Când o coadă de conectare iese, bash citește și execută comenzi din fișierul ~ / .bash_logout , dacă există.

Când o coajă interactivă care nu este o coajă de conectare este pornită, bash citește și execută comenzi de la ~ / .bashrc , dacă acel fișier există. Aceasta poate fi inhibată utilizând opțiunea --norc . Opțiunea --rcfile va forța bash să citească și să execute comenzi din fișier în loc de ~ / .bashrc .

Atunci când bash este pornit non-interactiv, pentru a rula un script de shell, de exemplu, caută variabila BASH_ENV în mediul înconjurător, își extinde valoarea dacă apare acolo și folosește valoarea extinsă ca nume de fișier pentru citire și executare . Bash se comportă ca și cum ar fi executat următoarea comandă:

dacă [-n "$ BASH_ENV"]; apoi . "$ BASH_ENV"; Fi

dar valoarea variabilei PATH nu este utilizată pentru a căuta numele fișierului.

Dacă bash este invocat cu numele sh , acesta încearcă să imite comportamentul de pornire al versiunilor istorice ale sh cât mai aproape posibil, respectând în același timp și standardul POSIX. Atunci când este invocată ca o coajă de conectare interactivă sau o coajă non-interactivă cu opțiunea -login , ea încearcă mai întâi să citească și să execute comenzi din / etc / profile și ~ / .profile , în acea ordine. Opțiunea - noprofile poate fi utilizată pentru a inhiba acest comportament. Când este invocată ca shell shell interactiv cu numele sh , bash caută variabila ENV , își extinde valoarea dacă este definită și folosește valoarea extinsă ca nume de fișier pentru a citi și a executa. Deoarece shell-ul invocat ca sh nu încearcă să citească și să execute comenzi din orice alte fișiere de pornire, opțiunea --rcfile nu are efect. O cochilie non-interactivă invocată cu numele sh nu încearcă să citească alte fișiere de pornire. Când este invocat ca sh , bash intră în modul posix după ce fișierele de pornire sunt citite.

Atunci când bash-ul este pornit în modul posix , la fel ca în cazul opțiunii de linie de comandă -posix , acesta respectă standardul POSIX pentru fișierele de pornire. În acest mod, shell-urile interactive extinde variabila ENV , iar comenzile sunt citite și executate din fișierul al cărui nume este valoarea extinsă. Nu sunt citite alte fișiere de pornire.

Bash încearcă să determine când este rulat de către daemonul shell shell, de obicei rshd . Dacă bash determină că este rulat de rshd , citește și execută comenzi de la ~ / .bashrc , dacă acel fișier există și poate fi citit. Nu va face acest lucru dacă este invocat ca sh . Opțiunea -norc poate fi folosită pentru a inhiba acest comportament, iar opțiunea --rcfile poate fi folosită pentru a forța un alt fișier să fie citit, dar rshd nu invocă, în general, shell-ul cu aceste opțiuni sau le permite să fie specificate.

În cazul în care shell-ul este inițiat cu id-ul utilizatorului (grupului) efectiv nu este egal cu id-ul real al utilizatorului (grup) și opțiunea -p nu este furnizată, nu se citesc fișierele de pornire, funcțiile shell nu sunt moștenite din mediul înconjurător, SHELLOPTS variabila, dacă apare în mediul înconjurător, este ignorată și id-ul utilizator eficient este setat la ID-ul real al utilizatorului. Dacă opțiunea -p este furnizată la invocare, comportamentul de pornire este același, dar ID-ul efectiv al utilizatorului nu este resetat.

DEFINIȚII

Următoarele definiții sunt utilizate în tot restul acestui document.

gol

Un spațiu sau o filă.

cuvânt

O secvență de caractere considerată ca o singură unitate de către coajă. De asemenea, cunoscut ca un simbol .

Nume

Un cuvânt format numai din caractere alfanumerice și subliniere și începând cu un caracter alfabetic sau un subliniat. De asemenea, este denumit un identificator .

metacaractere

Un personaj care, atunci când este necotat, separă cuvintele. Unul dintre următoarele:

| &; () <> tab-ul spațiu

operator de control

Un jeton care efectuează o funcție de control. Este unul din următoarele simboluri:

|| &&&; ;; () |

CUVINTE REZERVATE

Cuvintele rezervate sunt cuvinte care au un înțeles special asupra coajă. Următoarele cuvinte sunt recunoscute ca fiind rezervate atunci când sunt necotate și fie primul cuvânt al unei comenzi simple (a se vedea SHELL GRAMMAR de mai jos), fie al treilea cuvânt al unui caz sau al unei comenzi:

! caz se face elif altfel esac fi funcție dacă în select apoi până în timp ce {} timp [[]]

SHELL GRAMMAR

Comenzi simple

O comandă simplă este o secvență de alocări opționale variabile, urmată de cuvinte și redirecționări necompletate și terminate de un operator de control . Primul cuvânt specifică comanda care trebuie executată și este trecută ca argument zero. Cuvintele rămase sunt transmise ca argumente pentru comanda invocată.

Valoarea returnată a unei comenzi simple este starea ei de ieșire sau 128+ n dacă comanda este terminată de semnalul n .

conducte

O conductă este o secvență a uneia sau mai multor comenzi separate de caracterul | . Formatul unei conducte este:

[ timp [ -p ]] [! ] comandă [ comanda2 ...]

Ieșirea standard a comenzii este conectată printr-o conductă la intrarea standard a comenzii2 . Această conexiune este efectuată înainte de orice redirecționare specificată de comandă (vedeți REDIRECTION de mai jos).

Dacă cuvântul rezervat ! precede o conductă, starea de ieșire a acelei conducte este NU logică a stării de ieșire a ultimei comenzi. În caz contrar, starea conductei este starea de ieșire a ultimei comenzi. Shell așteaptă ca toate comenzile din conducte să se termine înainte de a reveni la o valoare.

Dacă cuvântul rezervat timp precede o conductă, timpul scurs, precum și timpul de utilizare și de sistem consumat prin execuția acestuia sunt raportate când conductele se termină. Opțiunea -p modifică formatul de ieșire la cel specificat de POSIX. Variabila TIMEFORMAT poate fi setată la un șir format care specifică modul în care trebuie afișate informațiile de sincronizare; consultați descrierea TIMEFORMAT sub Shell Variables de mai jos.

Fiecare comandă dintr-o conductă este executată ca un proces separat (adică într-un subshell).

liste

O listă este o secvență a uneia sau mai multor conducte separate de unul dintre operatori ; , & , && , sau || , și opțional oprită de una dintre ; , & , sau .

Dintre operatorii din listă, && și || au precedență egală, urmată de ; și &, care au precedență egală.

O secvență de una sau mai multe linii noi poate apărea într-o listă în locul unei punct și virgule pentru a delimita comenzile.

Dacă o comandă este terminată de operatorul de control & , shell-ul execută comanda în fundal într-un subshell. Shell-ul nu așteaptă terminarea comenzii, iar starea de returnare este 0. Comenzi separate prin a ; sunt executate secvențial; cochila așteaptă ca fiecare comandă să se termine pe rând. Starea de returnare este starea de ieșire a ultimei comenzi executate.

Operatorii de control && și || desemnează liste AND și liste OR, respectiv. O listă AND conține formularul

command1 && command2

command2 se execută dacă și numai dacă comanda1 returnează o stare de ieșire de zero.

O listă OR conține formularul

command1 || comanda2

command2 este executat dacă și numai dacă comanda1 returnează o stare de ieșire diferită de zero. Starea de returnare a listelor AND și OR este starea de ieșire a ultimei comenzi executate în listă.

Comenzi compuse

O comandă compusă este una dintre următoarele:

( listă )

lista este executată într-un subshell. Atribuirile variabile și comenzile încorporate care afectează mediul shell nu rămân în vigoare după terminarea comenzii. Starea de returnare este starea de ieșire a listei .

{ list ; }

lista este pur și simplu executată în mediul shell shell curent. lista trebuie terminată cu un rând nou sau punct și virgulă. Aceasta este cunoscută sub numele de comandă de grup . Starea de returnare este starea de ieșire a listei . Rețineți că, spre deosebire de metacaractele ( și ) , { și } sunt cuvinte rezervate și trebuie să apară atunci când un cuvânt rezervat este permis să fie recunoscut. Deoarece nu provoacă o rupere de cuvinte, ele trebuie să fie separate de listă prin spații albe.

(( expresie ))

Expresia este evaluată în conformitate cu regulile descrise mai jos în EVALUAREA ARITMETICĂ . Dacă valoarea expresiei este diferită de zero, starea de returnare este 0; în caz contrar, starea de returnare este 1. Aceasta este exact echivalentă cu lăsarea expresiei .

[[ expresie ]]

Returnați o stare de 0 sau 1 în funcție de evaluarea expresiei expresiei condiționate. Expresiile sunt compuse din primarele descrise mai jos în EXPRESIUNILE CONDIȚIONALE . Divizarea cuvântului și extinderea numelui de cale nu se efectuează pe cuvintele dintre [[ și ]] ; expansiunea tildei, extinderea parametrilor și a variabilelor, expansiunea aritmetică, substituția comenzilor, înlocuirea procesului și eliminarea citărilor.

Atunci când operatorii == și ! = Sunt utilizați, șirul din dreapta operatorului este considerat un model și se potrivește în conformitate cu regulile descrise mai jos, sub Pattern Matching . Valoarea returnată este 0 dacă șirul se potrivește sau nu corespunde modelului, respectiv 1, altfel. Orice parte a modelului poate fi citată pentru al forța să fie potrivită ca șir.

Expresiile pot fi combinate folosind următorii operatori, listați în ordinea descrescătoare a precedenței:

( expresie )

Returnează valoarea expresiei . Acest lucru poate fi folosit pentru a suprascrie prioritatea normală a operatorilor.

! expresie

Adevărat dacă expresia este falsă.

expresie1 && expresie2

Adevărat dacă atât expresia1, cât și expresia2 sunt adevărate.

expresie1 || expression2 Adevărat dacă expresia1 sau expresia2 este adevărată.

&& și || operatorii nu evaluează expresia2 dacă valoarea expresiei1 este suficientă pentru a determina valoarea de returnare a întregii expresii condiționale.

pentru nume [ în cuvânt ]; face lista ; Terminat

Lista cuvintele următoare este extinsă, generând o listă de elemente. Numele variabilei este setat la rândul său în fiecare element al acestei liste, iar lista este executată de fiecare dată. Dacă cuvântul este înlăturat, comanda for execută o singură dată pentru fiecare parametru pozițional care este setat (a se vedea PARAMETRII de mai jos). Starea de returnare este starea de ieșire a ultimei comenzi care se execută. Dacă expansiunea elementelor care urmează în rezultatele dintr-o listă goală, nu sunt executate comenzi și starea de returnare este 0.

pentru (( expr1 ; expr2 ; expr3 )); face lista ; Terminat

Mai întâi, expresia aritmetică expr1 este evaluată în conformitate cu regulile descrise mai jos în EVALUAREA ARITMETICĂ . Expresia aritmetică expr2 este apoi evaluată în mod repetat până când ea evaluează la zero. De fiecare dată când expr2 evaluează o valoare nenulă, se execută o listă și se evaluează expresia aritmetică expr3 . Dacă o expresie este omisă, ea se comportă ca și cum ar fi evaluată la 1. Valoarea returnată este starea de ieșire a ultimei comenzi din lista care este executată sau false dacă oricare dintre expresii este nevalidă.

selectați numele [ în cuvânt ]; face lista ; Terminat

Lista cuvintele următoare este extinsă, generând o listă de elemente. Setul de cuvinte extinse este imprimat pe eroarea standard, fiecare fiind precedată de un număr. În cazul în care cuvântul este omis, parametrii poziționali sunt tipăriți (a se vedea PARAMETRII de mai jos). Apare promptul PS3 și se citește o linie din intrarea standard. Dacă linia constă dintr-un număr corespunzător unuia dintre cuvintele afișate, atunci valoarea numelui este setată la acel cuvânt. Dacă linia este goală, vor fi afișate din nou cuvintele și promptul. Dacă se citește EOF, comanda se termină. Orice altă valoare de citire determină ca numele să fie setat la nul. Linia citită este salvată în variabila REPLY . Lista se execută după fiecare selecție până când se execută o comandă de pauză . Starea de ieșire a selectării este starea de ieșire a ultimei comenzi executate în listă sau zero dacă nu s-au executat comenzi.

cuvânt de caz în [[(] model [ | model ]

O comandă de caz extinde mai întâi cuvântul și încearcă să se potrivească cu fiecare model pe rând, folosind aceleași reguli de potrivire ca și pentru extinderea căii de cale (vedeți Expansiune nume de cale de mai jos). Când se găsește o potrivire, se execută lista corespunzătoare. După primul meci, nu se încearcă meciuri ulterioare. Starea de ieșire este zero dacă nu se potrivește modelul. În caz contrar, este starea de ieșire a ultimei comenzi executate în listă .

în cazul în care lista ; apoi lista; [ listă elif ; apoi lista ; ] ... [ altă listă ; ] fi

Dacă lista este executată. Dacă starea de ieșire este zero, atunci lista este executată. În caz contrar, fiecare listă de elif este executată la rândul său, iar dacă starea ei de ieșire este zero, atunci lista corespunzătoare este executată și comanda este finalizată. În caz contrar, lista de alte persoane este executată, dacă este prezentă. Starea de ieșire este starea de ieșire a ultimei comenzi executate sau zero dacă nu este testată condiția adevărată.

în timp ce lista ; face lista ; Terminat

până la listă ; face lista ; Terminat

Comanda while execută continuu lista de doze atâta timp cât ultima comandă din listă returnează o stare de ieșire de zero. Comanda until este identică cu comanda while , cu excepția faptului că testul este negat; lista de executări este executată atâta timp cât ultima comandă din listă returnează o stare de ieșire diferită de zero. Starea de ieșire a comenzilor până la comenzi este starea de ieșire din comanda ultima listă executată sau zero dacă nu a fost executat niciunul.

[ function ] nume () { list ; }

Aceasta definește o funcție denumită nume . Corpul funcției este lista de comenzi între {și}. Această listă este executată ori de câte ori numele este specificat ca fiind numele unei comenzi simple. Starea de ieșire a unei funcții este starea de ieșire a ultimei comenzi executate în corp. (Consultați FUNCȚII de mai jos.)

COMENTARII

Într-o coajă non-interactivă sau într-o coajă interactivă în care este activată opțiunea interactive_comments pentru builtin- ul shopt (vedeți SHELL BUILTIN COMMANDS de mai jos), un cuvânt care începe cu # determină ignorarea cuvântului și a tuturor caracterelor rămase de pe acea linie. O coajă interactivă fără opțiunea interactive_comments activată nu permite comentarii. Opțiunea interactive_comments este activată în mod implicit în shell-uri interactive.

citându

Citarea se utilizează pentru a elimina semnificația specială a anumitor caractere sau cuvinte în shell. Citarea poate fi utilizată pentru a dezactiva tratamentul special pentru caracterele speciale, pentru a împiedica recunoașterea cuvintelor rezervate ca atare și pentru a preveni expansiunea parametrilor.

Fiecare dintre metacaractele enumerate mai sus sub DEFINIȚII are un înțeles special pentru cochilie și trebuie citat dacă trebuie să se reprezinte.

Când se utilizează facilitățile de expansiune a istoriei de comandă, caracterul de expansiune a istoriei , de obicei ! , trebuie să fie citat pentru a împiedica expansiunea istoriei.

Există trei mecanisme de citare: caracterul de evacuare , citatele simple și ghilimele duble.

O coloană inversă neconversată ( \ ) este caracterul de evacuare . Aceasta păstrează valoarea literală a următorului caracter care urmează, cu excepția . Dacă apare o pereche \ , iar backslash-ul nu este citat, \ este tratat ca o continuare a liniei (adică este eliminat din fluxul de intrare și ignorat efectiv).

Introducerea caracterelor în citate unică păstrează valoarea literală a fiecărui caracter din cadrul ghilimelor. Este posibil să nu apară nici o citare unică între citatele singulare, chiar dacă este precedată de un backslash.

Introducerea caracterelor în ghilimele duble păstrează valoarea literală a tuturor caracterelor din citate, cu excepția $ , ` , și \ . Caracterele $ și ` păstrează semnificația lor specială în ghilimele duble. Backslash-ul își păstrează semnificația specială numai atunci când este urmat de unul dintre următoarele caractere: $ , ` , ' , \ sau . Un citat dublu poate fi citat în ghilimele duble, precedându-l cu un backslash.

Parametrii specifici * și @ au semnificație specială atunci când sunt în ghilimele duble (a se vedea PARAMETRII de mai jos).

Cuvintele din formularul ' string ' sunt tratate special. Cuvântul se extinde la șir , iar caracterele scoase din spate sunt înlocuite conform specificațiilor ANSI C. Secvențele de evacuare din spate, dacă sunt prezente, sunt decodate după cum urmează:

\A

alertă (clopot)

\ b

backspace

\ e

un caracter de evadare

\ f

form feed

\ n

linie nouă

\ r

retur transport

\ t

orizontală

\ v

verticală

\\

backslash

\“

citat unic

\ nnn

caracterul de opt biți a cărui valoare este valoarea octală nnn (una până la trei cifre)

\ x HH

caracterul de opt biți a cărui valoare este valoarea hexazecimală HH (una sau două cifre hexazecimale)

\ c x

un caracter control- x

Rezultatul extins este unic citat, ca și cum semnul dolarului nu ar fi fost prezent.

Un șir dublu-cotat precedat de un semn de dolar ( $ ) va determina traducerea șirului după localizarea curentă. Dacă locația curentă este C sau POSIX , semnul dolarului este ignorat. Dacă șirul este tradus și înlocuit, înlocuitorul este dublu-cotat.

PARAMETRI

Un parametru este o entitate care stochează valori. Acesta poate fi un nume , un număr sau unul dintre caracterele speciale enumerate mai jos, sub Parametri speciali . Pentru scopurile shell-ului, o variabilă este un parametru denotat de un nume . O variabilă are o valoare și un atribut zero sau mai multe. Atributele sunt atribuite utilizând declarația de comandă încorporată (a se vedea declarați mai jos în SHELL BUILTIN COMMANDS ).

Un parametru este setat dacă a fost atribuită o valoare. Șirul nul este o valoare validă. Odată ce o variabilă este setată, aceasta poate fi dezactivată numai prin utilizarea comenzii instalentă (a se vedea SHELL BUILTIN COMMANDS de mai jos).

O variabilă poate fi atribuită printr-o declarație a formularului

nume = [ valoare ]

Dacă valoarea nu este dată, variabilei i se atribuie șirul nul. Toate valorile sunt supuse extensiei tilde, extinderii parametrilor și variabilelor, substituției comenzilor, expansiunii aritmetice și eliminării citărilor (a se vedea EXPANSIUNEA de mai jos). Dacă variabila are atributul integer set, atunci valoarea este supusă unei expansiuni aritmetice chiar dacă expansiunea $ ((...)) nu este utilizată (a se vedea Extinderea aritmetică de mai jos). Divizarea cuvintelor nu se efectuează, cu excepția "$ @" după cum se explică mai jos în Parametri speciali . Extinderea denumirii de cale nu este efectuată. Exemplele de instrucțiuni pot apărea, de asemenea, ca argumente pentru comenzile declarate , formate , exportate , readonly și locale .

Parametrii poziționali

Un parametru pozițional este un parametru desemnat de una sau mai multe cifre, altul decât singura cifră. Parametrii poziționali sunt atribuiți din argumentele shell-ului atunci când sunt invocați și pot fi realocați folosind comanda încorporată. Parametrii poziționali nu pot fi atribuiți cu instrucțiuni de atribuire. Parametrii poziționali sunt înlocuiți temporar când se execută o funcție shell (vezi FUNCȚII de mai jos).

Atunci când un parametru pozițional format din mai mult de o singură cifră este extins, acesta trebuie să fie închis în bretele (a se vedea EXPANSIUNEA de mai jos).

Parametrii specifici

Cochilia tratează mai mult mai mulți parametri speciali. Acești parametri pot fi menționați numai; alocarea lor nu este permisă.

*

Se extinde la parametrii de poziție, pornind de la unul. Când extinderea are loc în cadrul unor ghilimele duble, se extinde la un singur cuvânt cu valoarea fiecărui parametru separat de primul caracter al variabilei speciale IFS . Aceasta înseamnă că " $ * " este echivalent cu " $ 1 c $ 2 c ... ", unde c este primul caracter al valorii variabilei IFS . Dacă IFS este dezactivat, parametrii sunt separați de spații. Dacă IFS este nulă, parametrii sunt uniți fără separatoare intervenite.

@

Se extinde la parametrii de poziție, pornind de la unul. Când expansiunea are loc în cadrul ghilimelelor duble, fiecare parametru se extinde la un cuvânt separat. Aceasta înseamnă că " $ @ " este echivalentă cu " $ 1 " " $ 2 " ... Atunci când nu există parametri poziționali, " $ @ " și $ @ se extinde la nimic (adică sunt eliminați).

#

Extinde la numărul de parametri poziționali în zecimal.

?

Extinde la starea celei mai recente conducte de prim plan.

-

Extinde la opțiunile de opțiune curente așa cum sunt specificate la invocare, prin setarea comenzii încorporate sau cele setate de shell-ul însuși (cum ar fi opțiunea -i ).

$

Extinde la ID-ul procesului de shell. Într-un subshell (), se extinde la ID-ul de proces al shell-ului curent, nu al subshell-ului.

!

Extinde la ID-ul procesului de comandă de fundal recent (asincron).

0

Extinde la numele shell-ului sau al shell-ului. Acest lucru este setat la inițializarea shell-ului. Dacă bash este invocat cu un fișier de comenzi, $ 0 este setat la numele acelui fișier. Dacă bash este pornit cu opțiunea -c , atunci $ 0 este setat la primul argument după șirul de execuție, dacă unul este prezent. În caz contrar, este setat la numele fișierului folosit pentru a invoca bash , așa cum este dat de argumentul zero.

_

La pornirea shell-ului, setați numele fișierului absolut al shell-ului sau script-ului de shell executat ca fiind trecut în lista de argumente. Ulterior, se extinde la ultimul argument la comanda anterioară, după expansiune. De asemenea, setați la numele de fișier complet al fiecărei comenzi executate și plasate în mediul exportat la respectiva comandă. Când verificați poșta, acest parametru menține numele fișierului de e-mail care este în curs de verificare.

Shell Variables

Următoarele variabile sunt setate de shell:

BASH

Extinde la numele de fișier complet folosit pentru a invoca această instanță de bash .

BASH_VERSINFO

O variabilă matricea a cărei membri dețin informații despre versiunea pentru acest exemplu de bash . Valorile atribuite membrilor matricei sunt după cum urmează:

BASH_VERSINFO [ 0]

Numărul versiunii majore ( eliberarea ).

BASH_VERSINFO [ 1]

Numărul versiunii minore ( versiunea ).

BASH_VERSINFO [ 2]

Nivelul de patch-uri.

BASH_VERSINFO [ 3]

Versiunea construită.

BASH_VERSINFO [ 4]

Starea lansării (de exemplu, beta1 ).

BASH_VERSINFO [ 5]

Valoarea MACHTYPE .

BASH_VERSION

Extinde la un șir care descrie versiunea acestei instanțe de bash .

COMP_CWORD

COMP_LINE

Linia de comandă curentă. Această variabilă este disponibilă numai în funcțiile shell și comenzile externe invocate de facilitățile programabile de finalizare (consultați Completarea programabilă de mai jos).

COMP_POINT

COMP_WORDS

O variabilă array (a se vedea tabelul de mai jos) constând din cuvintele individuale din linia de comandă curentă. Această variabilă este disponibilă numai în funcții de shell invocate de facilitățile programabile de finalizare (consultați Completarea programabilă de mai jos).

DIRSTACK

O variabilă de array (a se vedea tabelul de mai jos) conținând conținutul curent al stivei de directoare. Directoarele apar în teanc în ordinea în care sunt afișate de dirul încorporat. Atribuirea către membrii acestei matrice a variabilei poate fi utilizată pentru a modifica directoarele deja existente în stivă, dar inserările pushdatch și popd trebuie să fie folosite pentru a adăuga și elimina directoare. Alocarea la această variabilă nu va schimba directorul curent. Dacă DIRSTACK este dezactivat, acesta își pierde proprietățile speciale, chiar dacă este resetat ulterior.

EUID

Extinde la ID-ul de utilizator efectiv al utilizatorului curent, inițializat la pornirea shell-ului. Această variabilă este readonly.

FUNCNAME

Numele oricărei funcții a shell-ului care execută în prezent. Această variabilă există numai atunci când se execută o funcție shell. Atribuțiile către FUNCNAME nu au efect și returnează o stare de eroare. Dacă funcția FUNCNAME este dezactivată, aceasta își pierde proprietățile speciale, chiar dacă este resetată ulterior.

GRUPUL

O variabilă de array care conține lista de grupuri din care membrul respectiv este utilizatorul curent. Atribuțiile către GRUPuri nu au efect și returnează o stare de eroare. Dacă GRUPUL este dezactivat, acesta își pierde proprietățile speciale, chiar dacă este resetat ulterior.

HISTCMD

Numărul istoricului sau indicele din lista de istoric a comenzii curente. Dacă HISTCMD este dezactivat, acesta își pierde proprietățile speciale, chiar dacă este resetat ulterior.

HOSTNAME

Setare automată la numele gazdei curente.

HOSTTYPE

Setarea automată la un șir care descrie în mod unic tipul de mașină pe care se execută bash . Valoarea implicită este dependentă de sistem.

LINENO

De fiecare dată când acest parametru este referit, shell-ul înlocuiește un număr zecimal reprezentând numărul curent al liniei secvențiale (începând cu 1) într-un script sau într-o funcție. Când nu este într-un script sau o funcție, valoarea substituită nu este garantată ca fiind semnificativă. Dacă LINENO este dezactivată, își pierde proprietățile speciale, chiar dacă este resetată ulterior.

MACHTYPE

Setarea automată la un șir care descrie pe deplin tipul de sistem pe care se execută bash , în format standard al sistemului GNU cpu-companie-sistem . Valoarea implicită este dependentă de sistem.

OLDPWD

Directorul de lucru anterior stabilit de comanda cd .

OPTARG

Valoarea argumentului ultimei opțiuni prelucrate de comanda getopts builtin (a se vedea SHELL BUILTIN COMMANDS de mai jos).

OPTIND

Indexul următorului argument care trebuie procesat de comanda getopts builtin (a se vedea SHELL BUILTIN COMMANDS de mai jos).

ostype

Setarea automată la un șir care descrie sistemul de operare pe care se execută bash . Valoarea implicită este dependentă de sistem.

PIPESTATUS

O variabilă array (a se vedea tabelul de mai jos) care conține o listă de valori de stare de ieșire din procesele din conducta de primăvară cea mai recent executată (care poate conține doar o singură comandă).

PPID

ID-ul de proces al părintelui shell-ului. Această variabilă este readonly.

PWD

Actualul director de lucru stabilit de comanda cd .

ÎNTÂMPLĂTOR

De fiecare dată când acest parametru este referit, este generat un întreg aleator între 0 și 32767. Secvența numerelor aleatoare poate fi inițializată prin atribuirea unei valori RANDOM . Dacă RANDOM este dezactivat, acesta își pierde proprietățile speciale, chiar dacă este resetat ulterior.

RĂSPUNS

Setați linia de intrare citită de comanda citită încorporată când nu sunt furnizate argumente.

SECUNDE

De fiecare dată când acest parametru este referit, numărul de secunde de la inversarea shell-ului este returnat. Dacă o valoare este atribuită SECONDS , valoarea returnată la referințele ulterioare este numărul de secunde de la alocare plus valoarea atribuită. Dacă SECONDS este dezactivat, acesta își pierde proprietățile speciale, chiar dacă este resetat ulterior.

SHELLOPTS

O listă separată de colon cu opțiuni de shell activate. Fiecare cuvânt din listă este un argument valid pentru opțiunea -o pentru comanda încorporată (vezi SHELL BUILTIN COMMANDS de mai jos). Opțiunile care apar în SHELLOPTS sunt cele raportate ca fiind activate de set -o . Dacă această variabilă se află în mediul în care pornește bash , fiecare opțiune shell din listă va fi activată înainte de a citi orice fișiere de pornire. Această variabilă este numai pentru citire.

SHLVL

Creșterea cu câte o dată la fiecare pornire a unei instanțe de bash .

UID

Extinde la ID-ul de utilizator al utilizatorului curent, inițializat la pornirea shell-ului. Această variabilă este readonly.

Următoarele variabile sunt utilizate de shell. În unele cazuri, bash atribuie o valoare implicită unei variabile; aceste cazuri sunt notate mai jos.

BASH_ENV

Dacă acest parametru este setat când bash execută un script de shell, valoarea sa este interpretată ca un nume de fișier care conține comenzi pentru inițializarea shell-ului, ca în ~ / .bashrc . Valoarea BASH_ENV este supusă extinderii parametrilor, substituției comenzilor și expansiunii aritmetice înainte de a fi interpretată ca nume de fișier. PATH nu este folosit pentru a căuta numele de fișier rezultat.

CDPATH

Calea de căutare pentru comanda cd . Aceasta este o listă de directoare separate de colon, în care shell-ul caută directoarele destinație specificate de comanda cd . O valoare a eșantionului este ".: ~: / Usr".

COLOANE

Folosit de comanda selectată încorporată pentru a determina lățimea terminalului la imprimarea listelor de selecție. Setarea automată la primirea unui SIGWINCH.

COMPREPLY

O variabilă array din care bash citește posibilele compleceri generate de o funcție de shell invocată de facilitatea de completare programabilă (a se vedea completarea programabilă de mai jos).

FCEDIT

Editorul implicit pentru comanda builtin fc .

FIGNORE

O listă de sufixe separate de colon pentru a fi ignorată atunci când se efectuează realizarea unui nume de fișier (a se vedea READLINE de mai jos). Un nume de fișier al cărui sufix se potrivește cu una dintre intrările din FIGNORE este exclus din lista de nume de fișiere potrivite. O valoare a eșantionului este ".o: ~".

GLOBIGNORE

O listă de modele separate de colon care definesc setul de nume de fișiere care urmează să fie ignorate prin extinderea numelui de cale. Dacă un nume de fișier care corespunde unui model de expansiune de cale, se potrivește de asemenea cu unul dintre modelele din GLOBIGNORE , acesta este eliminat din lista de potriviri.

HISTCONTROL

Dacă este setată la o valoare a ignorespace , liniile care încep cu un caracter spațial nu sunt introduse în lista de istoric. Dacă este setat la o valoare de ignoredups , liniile care se potrivesc cu ultima linie de istorie nu sunt introduse. O valoare a lui ignoreboth combină cele două opțiuni. Dacă este dezactivat sau dacă este setat la orice altă valoare decât cele de mai sus, toate liniile citite de parser sunt salvate în lista de istoric, în funcție de valoarea lui HISTIGNORE . Funcția acestei variabile este înlocuită de HISTIGNORE . Cea de-a doua linie și una ulterioară a unei comenzi compuse cu mai multe linii nu sunt testate și sunt adăugate istoricului indiferent de valoarea HISTCONTROL .

HISTFILE

Numele fișierului în care se salvează istoricul comenzilor (a se vedea ISTORIA de mai jos). Valoarea implicită este ~ / .bash_history . Dacă este dezactivată, istoricul comenzilor nu este salvat când se iese o coală interactivă.

HISTFILESIZE

Numărul maxim de linii conținute în fișierul istoric. Atunci când această variabilă este atribuită unei valori, fișierul istoric este trunchiat, dacă este necesar, să nu conțină mai mult decât acel număr de linii. Valoarea implicită este 500. Fișierul istoric este, de asemenea, trunchiat la această dimensiune după ce a fost scris când a ieșit o coală interactivă.

HISTIGNORE

O listă de modele separate de colon, utilizată pentru a decide care linii de comandă ar trebui salvate în lista de istoric. Fiecare model este ancorat la începutul liniei și trebuie să se potrivească cu linia completă (nu este atașat implicit " * "). Fiecare model este testat în raport cu linia după ce s- au aplicat verificările specificate de HISTCONTROL . În plus față de caracterele normale de potrivire a caracterelor, ` & 'se potrivește liniei istorice anterioare. " și " pot fi scăpate folosind o loviŃă inversă; backslash-ul este eliminat înainte de a încerca o potrivire. Cea de-a doua linie și una ulterioară a unei comenzi combinate cu mai multe linii nu sunt testate și sunt adăugate istoriei indiferent de valoarea lui HISTIGNORE .

HISTSIZE

Numărul de comenzi pe care trebuie să le rețineți în istoricul comenzilor (a se vedea ISTORIA de mai jos). Valoarea implicită este 500.

ACASĂ

Directorul de domiciliu al utilizatorului curent; argumentul implicit pentru comanda cd builtin. Valoarea acestei variabile este, de asemenea, utilizată atunci când se efectuează extinderea tilde.

HOSTFILE

Conține numele unui fișier în același format ca / etc / hosts care ar trebui citit când shell-ul trebuie să completeze un nume de gazdă. Lista posibilităților de completare a numelui de gazdă poate fi modificată în timp ce shell-ul rulează; data viitoare după terminarea comenzii după modificarea valorii, bash adaugă conținutul noului fișier în lista existentă. Dacă HOSTFILE este setat, dar nu are nicio valoare, bash încearcă să citească / etc / hosts pentru a obține lista completă a posibilelor nume de gazdă. Când HOSTFILE este dezactivat, lista cu numele de gazdă este șters.

IFS

Separatorul intern de câmp folosit pentru divizarea cuvintelor după expansiune și pentru divizarea liniilor în cuvinte cu comanda citită încorporată. Valoarea implicită este `` ''.

IGNOREEOF

Controlează acțiunea unei cochilii interactive la primirea unui caracter EOF ca intrare unică. Dacă este setat, valoarea este numărul de caractere EOF consecutive care trebuie introduse ca primii caractere pe o linie de intrare înainte de ieșirea bash . Dacă variabila există, dar nu are o valoare numerică sau nu are valoare, valoarea implicită este 10. Dacă aceasta nu există, EOF semnifică sfârșitul intrării în shell.

INPUTRC

Numele fișierului pentru fișierul de pornire readline , înlăturând implicit valoarea ~ / .inputrc (a se vedea READLINE de mai jos).

LANG

Se folosește pentru a determina categoria locale pentru orice categorie care nu este selectată în mod specific cu o variabilă care începe cu LC_ .

LC_ALL

Această variabilă înlocuiește valoarea LANG și a oricărei alte variabile LC_ specificând o categorie locale.

LC_COLLATE

Această variabilă determină ordinea de colaționare utilizată la sortarea rezultatelor extinderii căii de cale și determină comportamentul expresiilor de interval, al claselor de echivalență și al secvențelor de colaționare în cadrul extinderii căii de cale și al potrivirii tiparelor.

LC_CTYPE

Această variabilă determină interpretarea caracterelor și comportamentul claselor de caractere în cadrul extinderii căilor de cale și al potrivirii tiparelor.

LC_MESSAGES

Această variabilă determină localizarea utilizată pentru traducerea șirurilor cu două cifre, precedate de un $ .

LC_NUMERIC

Această variabilă determină categoria locală utilizată pentru formatarea numărului.

LINII

Folosit de comanda selectată pentru a determina lungimea coloanei pentru listarea listelor de selecție. Setarea automată la primirea unui SIGWINCH.

POȘTĂ

Dacă acest parametru este setat la un nume de fișier și variabila MAILPATH nu este setată, bash informează utilizatorul despre sosirea mesajului de poștă electronică în fișierul specificat.

MAILCHECK

Specifică cât de des (în secunde) verificările bash pentru e-mail. Valoarea implicită este de 60 de secunde. Când este timpul să verificați mesajele, shell-ul face acest lucru înainte de a afișa promptul principal. Dacă această variabilă este dezactivată sau setată la o valoare care nu este mai mare sau egală cu zero, coaja dezactivează verificarea e-mailului.

MAILPATH

O listă separată de nume de fișiere care să fie verificată pentru e-mail. Mesajul care va fi tipărit atunci când e-mailul ajunge într-un anumit fișier poate fi specificat prin separarea numelui de fișier din mesaj cu un "?". Când este folosit în textul mesajului, $ _ se extinde la numele fișierului de mail curent. Exemplu:

MAILPATH = '/ var / mail / bfox?' Ai mail ": ~ / shell-mail?

Bash furnizează o valoare implicită pentru această variabilă, dar locația fișierelor de poștă electronică utilizată este dependentă de sistem (de exemplu, / var / mail / $ USER ).

OPTERR

Dacă este setat la valoarea 1, bash afișează mesaje de eroare generate de comanda getopts builtin (a se vedea SHELL BUILTIN COMMANDS de mai jos). OPTERR este inițializată la 1 de fiecare dată când shell-ul este invocat sau este executat un script shell.

CALE

Calea de căutare pentru comenzi. Este o listă de directoare separată de colon, în care shell-ul caută comenzi (a se vedea COMMAND EXECUTION de mai jos). Calea implicită este dependentă de sistem și este stabilită de administratorul care instalează bash . O valoare comună este `` / usr / gnu / bin: / usr / local / bin: / usr / ucb: / bin: / usr / bin :.

POSIXLY_CORRECT

Dacă această variabilă se află în mediul în care începe bash-ul , shell-ul intră în modul posix înainte de a citi fișierele de pornire, ca în cazul în care opțiunea de invocare -posix a fost furnizată. Dacă este setat în timp ce shell-ul rulează, bash permite modul posix , ca în cazul în care comanda -o posix a fost executată.

PROMPT_COMMAND

Dacă este setat, valoarea este executată ca o comandă înainte de a emite fiecare prompt primar.

PS1

Valoarea acestui parametru este extinsă (a se vedea RĂSPUNSUL de mai jos) și este utilizată ca șir de prompt primar. Valoarea implicită este `` \ s- \ v \ $ ''.

PS2

Valoarea acestui parametru este extinsă ca și în cazul PS1 și este utilizată ca șir de prompt secundar. Valoarea implicită este `` > ''.

PS3

Valoarea acestui parametru este folosită ca prompt pentru comanda select (vezi SHELL GRAMMAR de mai sus).

PS4

Valoarea acestui parametru este extinsă ca la PS1, iar valoarea este tipărită înainte de fiecare afișare a comenzii în timpul unei urmăriri de execuție. Primul caracter al lui PS4 este reprodus de mai multe ori, după cum este necesar, pentru a indica mai multe nivele de indirecție. Valoarea implicită este `` + ''.

TIMEFORMAT

Valoarea acestui parametru este folosită ca șir de format care specifică modul în care ar trebui afișate informațiile de sincronizare pentru conductele prefixate cu cuvântul rezervat timpului . Caracterul % introduce o secvență de evacuare care este extinsă la o valoare de timp sau alte informații. Secvențele de evadare și semnificațiile lor sunt după cum urmează; armăturile denotă porțiuni opționale.

%%

Un procent literal.

% [ p ] [1] R

Timpul scurs în câteva secunde.

% [ p ] [l] U

Numărul de secunde CPU petrecute în modul utilizator.

% [ p ] [l] S

Numărul de secunde CPU petrecute în modul de sistem.

% P

Procentajul procesorului, calculat ca (% U +% S) /% R.

Opțional p este o cifră care specifică precizia , numărul de cifre fracționate după un punct zecimal. O valoare de 0 nu determină ieșirea punctului zecimal sau a fracțiunii. La cel mult trei locuri, după punctul zecimal, pot fi specificate; valorile lui p mai mari de 3 sunt modificate la 3. Dacă p nu este specificat, se folosește valoarea 3.

Opțional l specifică un format mai lung, inclusiv minute, al formularului MM m SS . FF s. Valoarea p determină dacă fracțiunea este sau nu inclusă.

Dacă această variabilă nu este setată, bash acționează ca și cum ar avea valoarea $ '\ nreal \ t% 3lR \ nuser \ t% 3lU \ nsys% 3lS' . Dacă valoarea este nulă, nu este afișată nici o informație de sincronizare. O linie nouă este adăugată când se afișează șirul de format.

TMOUT

Dacă este setat la o valoare mai mare decât zero, TMOUT este tratat ca interval de timp prestabilit pentru citirea încorporată. Comanda de selectare se termină dacă intrarea nu sosește după secundele TMOUT când intrarea vine de la un terminal. Într-un shell interactiv, valoarea este interpretată ca numărul de secunde de așteptare pentru introducere după emiterea promptului principal. Bash se termină după ce așteaptă numărul de secunde dacă intrarea nu ajunge.

auto_resume

Această variabilă controlează modul în care shell-ul interacționează cu utilizatorul și controlul funcțiilor. Dacă această variabilă este setată, comenzile simple de cuvânt simple, fără redirecționări, sunt tratate ca fiind candidați pentru reluarea unei lucrări deja întrerupte. Nu este permisă nicio ambiguitate; dacă există mai multe lucrări începând cu șirul introdus, este selectată lucrarea cea mai recentă accesată. Numele unui loc de muncă oprit, în acest context, este linia de comandă folosită pentru ao porni. Dacă este setat la valoarea exactă , șirul furnizat trebuie să se potrivească exact cu numele unui job oprit; dacă este setat la subrevers , șirul furnizat trebuie să se potrivească cu un substring al numelui unei lucrări întrerupte. Valoarea substring oferă funcționalitate analogă cu %? identificatorul locului de muncă (a se vedea JOB CONTROL de mai jos). Dacă este setat la orice altă valoare, șirul furnizat trebuie să fie un prefix al numelui unei lucrări oprite; aceasta oferă funcționalitate analogă cu identificatorul de locuri de muncă % .

histchars

Cele două sau trei caractere care controlează expansiunea istoricului și tokenizarea (vezi EXPANSIUNEA ISTORICĂ de mai jos). Primul personaj este caracterul de extindere a istoriei , caracterul care semnalează începerea unei expansiuni istorice, în mod normal ` ! “. Cel de-al doilea caracter este caracterul de înlocuire rapidă , care este utilizat ca sintagmă pentru reluarea comenzii anterioare introduse, înlocuind o comandă cu un șir pentru altul. Valoarea implicită este ` ^ '. Al treilea caracter opțional este caracterul care indică faptul că restul liniei este un comentariu când este găsit primul caracter al unui cuvânt, în mod normal " # ". Caracterul de comentariu istoric face ca înlocuirea istoriei să fie omisă pentru restul cuvintelor de pe linie. Aceasta nu determină neapărat ca parserul pentru coajă să trateze restul liniei drept comentariu.

Arrays

Bash oferă variabile de dimensiune unidimensională. Orice variabilă poate fi folosită ca o matrice; declarația construită va declara în mod explicit o matrice. Nu există nici o limită maximă pentru dimensiunea unui tablou, nici cerința ca membrii să fie indexați sau atribuiți contiguu. Arrays sunt indexate folosind numere întregi și sunt bazate pe zero.

O matrice este creată automat dacă orice variabilă este atribuită utilizării sintaxei [ subscript ] = value . Indicele este tratat ca o expresie aritmetică care trebuie evaluată la un număr mai mare sau egal cu zero. Pentru a declara în mod explicit o matrice, folosiți declarați -a nume (vedeți SHELL BUILTIN COMMANDS de mai jos). declară - este acceptat și numele [ subscript ]; indicele este ignorat. Atributele pot fi specificate pentru o variabilă array utilizând declarațiile încorporate și încorporate. Fiecare atribut se aplică tuturor membrilor unui matrice.

Array-urile sunt atribuite utilizării atribuțiilor complexe ale formularului name = ( valoarea 1 ... value n ) , unde fiecare valoare este de tip [ subscript ] = șir . Se cere numai șir . Dacă sunt furnizate parantezele opționale și indicele, acel index este atribuit; în caz contrar, indicele elementului atribuit este ultimul indice atribuit de instrucțiune plus unul. Indexarea începe de la zero. Această sintaxă este de asemenea acceptată de declarația încorporată. Elementele individuale de tabelă pot fi atribuite utilizării sintaxei de nume [ subscript ] = valoare introdusă mai sus.

Unset builtin este folosit pentru a distruge matricele. numele unset [ subscript ] distruge elementul matricei la indicele indexului. numele unset , unde numele este o matrice sau un nume [ subscript ], unde indexul este * sau @ , elimină întreaga matrice.

Combinatele declarate , locale și readonly builtins acceptă fiecare o opțiune -a pentru a specifica o matrice. Cititul încorporat acceptă o opțiune -a pentru a atribui o listă de cuvinte citite de la intrarea standard într-o matrice. Setarea și declararea încorporată a valorilor matricei afișate într-un mod care le permite să fie reutilizate ca sarcini.

EXPANSIUNE

Extinderea se face pe linia de comandă după ce a fost împărțită în cuvinte. Există șapte tipuri de extindere: extinderea extensiei , extinderea tildei , extinderea parametrilor și a variabilelor , substituirea comenzilor , expansiunea aritmetică , divizarea cuvintelor și extinderea numelor de cale .

Ordinea extinderilor este: expansion expansion, expansion tilde, parametru, expansiune variabilă și aritmetică și substituție de comandă (realizată într-o manieră stânga-dreapta), împărțirea cuvântului și extinderea numelui de cale.

Pe sistemele care o pot sprijini, există o extindere suplimentară disponibilă: înlocuirea procesului .

Extensia brațelor

Extensia brațelor este un mecanism prin care se pot genera șiruri arbitrare. Acest mecanism este similar cu extinderea numelui de cale , dar numele de fișiere generate nu trebuie să existe. Modelele care urmează a fi extinse se iau sub forma unei preambuluri opționale, urmate de o serie de șiruri separate între virgule, între o pereche de bretele, urmată de un postscript opțional. Preambulul este prefixat pentru fiecare șir conținut în bretele, iar post-scriptul este apoi atașat la fiecare șir rezultat, extinzându-se de la stânga la dreapta.

Extensiile brațelor pot fi imbricate. Rezultatele fiecărui șir extins nu sunt sortate; din stânga la dreapta este păstrată. De exemplu, un { d, c, b } se extinde în `adee abe '.

Extinderea brațelor este efectuată înainte de orice alte expansiuni, iar orice caracter caracteristic altor expansiuni este păstrat în rezultat. Este strict textual. Bash nu aplică nici o interpretare sintactică în contextul expansiunii sau al textului dintre brațe.

Această construcție este de obicei folosită ca o scurtă descriere atunci când prefixul comun al șirurilor care urmează a fi generat este mai lung decât în ​​exemplul de mai sus:

mkdir / usr / local / src / bash / {vechi, nou, dist, bugs}

sau

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

Extinderea brațelor introduce o ușoară incompatibilitate cu versiunile istorice ale sh . sh nu tratează bretelele de deschidere sau de închidere în special când apar ca parte a unui cuvânt și le păstrează în ieșire. Bash îndepărtează bretelele de la cuvinte ca o consecință a expansiunii ornamentelor. De exemplu, un cuvânt introdus în sh ca fișier {1,2} apare identic în ieșire. Același cuvânt este afișat ca file1 file2 după expansiunea de bash . Dacă se dorește o compatibilitate strictă cu sh , porniți bash cu opțiunea + B sau dezactivați extensia brățării cu opțiunea + B la comanda set (vedeți SHELL BUILTIN COMMANDS de mai jos).

Extinderea Tilde

Dacă un cuvânt începe cu un caracter tilde necotat (` ~ '), toate caracterele care preced prima tăietură necotată (sau toate caracterele, dacă nu există nici o tăietură necotată) sunt considerate un prefix tilde . Dacă nu este citat niciunul dintre caracterele din prefixul tilde, caracterele din prefixul tilde care urmează după tilda sunt tratate ca un nume de conectare posibil. Dacă acest nume de conectare este un șir nul, tilda este înlocuită cu valoarea parametrului shell HOME . Dacă HOME este dezactivat, directorul de acasă al utilizatorului care execută shell-ul este înlocuit în schimb. În caz contrar, prefixul tilde este înlocuit cu directorul de domiciliu asociat cu numele de conectare specificat.

Dacă prefixul tilde este "~ +", valoarea variabilei PWD variabile înlocuiește prefixul tilde. Dacă prefixul tilde este "~ -", valoarea variabilei OLDPWD , dacă este setată, este înlocuită. Dacă caracterele care urmează după tilde din prefixul tilde constau dintr-un număr N , opțional prefixat cu un "+" sau un "-", prefixul tilde este înlocuit cu elementul corespunzător din stiva directorului, așa cum ar fi afișat de către dir builtin invocat cu prefixul tilde ca argument. Dacă caracterele care urmează după tilde din prefixul tilde constau dintr-un număr fără "+" sau "-", se presupune că este "+".

Dacă numele de conectare este nevalid sau dacă extensia tilde nu reușește, cuvântul este neschimbat.

Fiecare atribuire a variabilei este verificată pentru prefixele tilde necotate imediat după o : sau = . În aceste cazuri, se efectuează și extinderea tildei. În consecință, se pot folosi nume de fișiere cu tilde în alocări pentru PATH , MAILPATH și CDPATH , iar shell-ul atribuie valoarea extinsă.

Extinderea parametrilor

Caracterul ` $ 'introduce extensia parametrilor, înlocuirea comenzilor sau expansiunea aritmetică. Numele parametrului sau simbolul care urmează să fie extins poate fi închis în brațe, care sunt opționale, dar care servesc la protejarea variabilei care urmează să fie extinsă de caracterele imediat următoare, care ar putea fi interpretate ca parte a numelui.

Atunci când sunt folosite bretele, brățara de încheiere care se potrivește este prima ' } "care nu a scăpat de o backslash sau într-un șir cotat, și nu într-o expansiune aritmetică încorporată, înlocuire de comandă sau extindere paramter.

Valoarea parametrului este înlocuită. Plăcile sunt necesare atunci când parametrul este un parametru pozițional cu mai mult de o cifră sau când parametrul este urmat de un caracter care nu trebuie interpretat ca parte a numelui acestuia.

În fiecare dintre cazurile de mai jos, cuvântul este supus extensiei tilde, expansiunii parametrilor, substituției comenzilor și expansiunii aritmetice. Atunci când nu se realizează extinderea substringului, testele bash pentru un parametru care este dezactivat sau nul; omiterea colonului duce la un test numai pentru un parametru care este dezactivat.

Utilizați valorile implicite . Dacă parametrul este dezactivat sau nu, extensia cuvântului este înlocuită. În caz contrar, valoarea parametrului este înlocuită.

Alocați valorile implicite . Dacă parametrul este dezactivat sau nul, extinderea cuvântului este atribuită parametrului . Valoarea parametrului este apoi înlocuită. Este posibil ca parametrii parametrii și parametrii specifici să nu li se atribuie acest lucru.

Eroare la afișare dacă este nulă sau dezactivată . Dacă parametrul este nul sau dezactivat, extensia cuvântului (sau un mesaj în acest sens dacă nu există cuvânt ) este scrisă la eroarea standard, iar shell-ul, dacă nu este interactiv, iese. În caz contrar, valoarea parametrului este înlocuită.

Utilizați valoarea alternativă . Dacă parametrul este nul sau dezactivat, nimic nu este înlocuit, altfel expansiunea cuvântului este înlocuită.

Extinde la numele variabilelor ale căror nume încep cu prefixul , separate de primul caracter al variabilei speciale IFS .

Se înlocuiește lungimea în caractere a valorii parametrului . Dacă parametrul este * sau @ , valoarea substituită este numărul de parametri poziționali. Dacă parametrul este un nume de matrice abonat la * sau @ , valoarea substituită este numărul elementelor din matrice.

Cuvântul este extins pentru a produce un model la fel ca în expansiunea de nume de cale. Dacă modelul se potrivește cu începutul valorii parametrului , atunci rezultatul extinderii este valoarea extinsă a parametrului cu cel mai scurt model de potrivire (cazul " # ") sau cel mai lung model de potrivire (" ## " "). Dacă parametrul este @ sau * , operația de îndepărtare a tiparului este aplicată la rândul său fiecărui parametru pozițional, iar extinderea este lista rezultantă. Dacă parametrul este o variabilă de array înscrisă cu @ sau * , operația de îndepărtare a tiparului este aplicată fiecărui membru al matricei, iar extinderea este lista rezultantă.

Cuvântul este extins pentru a produce un model la fel ca în expansiunea de nume de cale. În cazul în care modelul se potrivește cu o porțiune care urmează în urma extinderii valorii parametrului , atunci rezultatul expansiunii este valoarea extinsă a parametrului cu cel mai scurt model de potrivire (cazul " % ") sau cel mai lung model de potrivire (" % '' caz) a fost ștearsă. Dacă parametrul este @ sau * , operația de îndepărtare a tiparului este aplicată la rândul său fiecărui parametru pozițional, iar extinderea este lista rezultantă. Dacă parametrul este o variabilă de array înscrisă cu @ sau * , operația de îndepărtare a tiparului este aplicată fiecărui membru al matricei, iar extinderea este lista rezultantă.

Modelul este extins pentru a produce un model la fel ca la extinderea traseului. Parametrul este extins, iar cea mai lungă potrivire a modelului cu valoarea sa este înlocuită cu șir . În prima formă, numai primul meci este înlocuit. A doua formă face ca toate potrivirile de model să fie înlocuite cu șir . Dacă modelul începe cu # , trebuie să se potrivească la începutul valorii extinsă a parametrului . Dacă modelul începe cu % , trebuie să se potrivească la sfârșitul valorii extinsă a parametrului . Dacă șirul este nul, șirul de șablon este șters și șablonul / următorul poate fi omis. Dacă parametrul este @ sau * , operația de substituire este aplicată la rândul său fiecărui parametru pozițional, iar extinderea este lista rezultantă. Dacă parametrul este o variabilă array abonată cu @ sau * , operația de substituire este aplicată fiecărui membru al matricei, iar extinderea este lista rezultantă.

Comandă de înlocuire

Comandarea înlocuire permite ieșirea unei comenzi să înlocuiască numele comenzii. Există două forme:

$ ( comanda )

sau

" comanda "

Bash efectuează extinderea executând comanda și înlocuind înlocuirea comenzii cu ieșirea standard a comenzii, cu orice noul linie trailing eliminată. Noile linii încorporate nu sunt șterse, dar pot fi eliminate în timpul divizării cuvintelor. Înlocuirea comenzii $ ( fișierul cat ) poate fi înlocuită cu $ (< fișier ) echivalent dar mai rapid.

Atunci când se folosește forma de înlocuire în stil vechi, substituția inversă își păstrează semnificația literală, cu excepția cazului în care este urmată de $ , ` , sau \ . Primul sumar care nu este precedat de o backslash întrerupe înlocuirea comenzii. Când folosiți formularul $ ( comanda ), toate caracterele dintre paranteze alcătuiesc comanda; niciunul nu este tratat special.

Comenzile de înlocuire pot fi imbricate. Pentru a cuibări atunci când utilizați formularul din coloana cronometrică, evacuează coloanele spirituale interioare cu backslash-uri.

Dacă substituția apare în ghilimele duble, divizarea cuvântului și extinderea numelui de cale nu sunt efectuate pe rezultate.

Extinderea aritmetică

Expansiunea aritmetică permite evaluarea unei expresii aritmetice și înlocuirea rezultatului. Formatul pentru expansiunea aritmetică este:

$ (( expresie ))

Expresia este tratată ca și cum ar fi în interiorul citatelor duble, dar o dublă cotație în paranteze nu este tratată special. Toate semnele din expresie sunt supuse extinderii parametrilor, extinderii șirului, înlocuirii comenzilor și eliminării citărilor. Ar trebui să fie imbricate substituțiile aritmetice.

Evaluarea se efectuează în conformitate cu regulile enumerate mai jos în cadrul evaluării ARITMETICE . Dacă expresia este nevalidă, bash imprimă un mesaj care indică o eroare și nu are loc nicio substituire.

Înlocuirea procesului

Înlocuirea proceselor este susținută de sistemele care suportă numite conducte ( FIFO ) sau de metoda / dev / fd de denumire a fișierelor deschise. Acesta are forma <( listă ) sau > ( listă ) . Lista de procese este rulată cu intrarea sau ieșirea conectată la un FIFO sau la un fișier din / dev / fd . Numele acestui fișier este trecut ca un argument pentru comanda curentă ca urmare a extinderii. Dacă se utilizează formularul > ( listă ) , scrierea în fișier va furniza o intrare pentru listă . Dacă se folosește formularul <( listă ) , fișierul trecut ca argument trebuie citit pentru a obține lista de ieșire.

Atunci când este disponibilă, substituția procesului se realizează simultan cu expansiunea parametrilor și a variabilelor, substituirea comenzilor și expansiunea aritmetică.

Divizarea cuvintelor

Shell scanează rezultatele extinderii parametrilor, substituției comenzilor și expansiunii aritmetice care nu au avut loc în cadrul ghilimelelor duble pentru divizarea cuvintelor .

Cochilia tratează fiecare caracter al IFS ca delimitator și împarte rezultatele celorlalte expansiuni în cuvinte pe aceste caractere. Dacă IFS este dezactivat sau valoarea lui este exact , implicit, atunci orice secvență de caractere IFS servește la delimitarea cuvintelor. Dacă IFS are o valoare diferită de cea implicită, atunci secvențele spațiului și filelor din spațiul alb sunt ignorate la începutul și la sfârșitul cuvântului, atâta timp cât caracterul de spațiu albe este în valoarea IFS (un caracter IFS ). Orice caracter din IFS care nu este spațiul alb IFS , împreună cu orice caractere adiacente IFS spațiu, delimitează un câmp. O secvență de caractere din spațiul liber IFS este, de asemenea, tratată ca un delimiter. Dacă valoarea IFS este nulă, nu apare nici o divizare a cuvintelor.

Expresia argumentelor nula ( "" sau "" ) sunt păstrate. Argumentele nulte implicite necotate, rezultate din extinderea parametrilor care nu au valori, sunt eliminate. Dacă un parametru fără valoare este extins în ghilimele duble, rezultă un argument nul și este reținut.

Rețineți că, dacă nu se produce o expansiune, nu se efectuează nicio divizare.

Extinderea numelui de cale

După divizarea cuvintelor, cu excepția cazului în care opțiunea -f a fost setată, bash scanează fiecare cuvânt pentru caracterele * ,? , și [ . Dacă apare unul dintre aceste caractere, atunci cuvântul este considerat ca un model și înlocuit cu o listă de nume de fișiere care se potrivesc modelului, sortată în ordine alfabetică. Dacă nu se găsesc nume de fișier potrivite și opțiunea shell nullglob este dezactivată, cuvântul este lăsat neschimbat. Dacă opțiunea nullglob este setată și nu sunt găsite potriviri, cuvântul este eliminat. Dacă opțiunea shell nocaseglob este activată, potrivirea este efectuată fără a ține seama de cazul caracterelor alfabetice. Atunci când un model este utilizat pentru extinderea numelui de cale, caracterul ``. '' La începutul unui nume sau imediat după o slash trebuie să corespundă explicit, cu excepția cazului în care opțiunea shell dotglob este setată. Atunci când se potrivește un nume de cale, caracterul slash trebuie întotdeauna să corespundă în mod explicit. În alte cazuri, caracterul "." Nu este tratat special. Vedeți descrierea șablonului de mai jos sub SHELL BUILTIN COMMANDS pentru o descriere a opțiunilor shell nocaseglob , nullglob și dotglob .

Variabila shell GLOBIGNORE poate fi utilizată pentru a restricționa setul de nume de fișiere care se potrivesc cu un model . Dacă este setat GLOBIGNORE , fiecare nume de fișier care se potrivește de asemenea cu unul dintre modelele din GLOBIGNORE este eliminat din lista de potriviri. Numele de fișiere ``. '' Și `` .. '' sunt întotdeauna ignorate, chiar dacă este setat GLOBIGNORE . Cu toate acestea, setarea GLOBIGNORE are efectul de a activa opțiunea shell dotglob , astfel încât toate celelalte nume de fișiere care încep cu un "." Se vor potrivi. Pentru a obține vechiul comportament de ignorare a numelor de fișiere care încep cu un ``. '' , Faceți ``. * '' Unul dintre modelele din GLOBIGNORE . Opțiunea dotglob este dezactivată când GLOBIGNORE este dezactivată.

Potrivire de model

Orice caracter care apare într-un model, altul decât caracterele modelului special descris mai jos, se potrivește. Caracterul NUL nu poate să apară într-un model. Caracterele de model special trebuie să fie citate dacă trebuie să fie potrivite literal.

Caracterele de model special au următoarele semnificații:

*

Se potrivește cu orice șir, inclusiv șirul nul.

?

Se potrivește cu un singur caracter.

[...]

Se potrivește cu oricare dintre caracterele închise. O pereche de caractere separate printr-o cratimă denotă o expresie a intervalului ; orice caracter care sortează între cele două caractere, inclusiv, folosind secvența de colaționare și setul de caractere din locația actuală, este potrivită. Dacă primul caracter care urmează [ este un ! sau a ^ atunci orice caracter nu este închis. Ordinea de sortare a caracterelor în expresiile de domeniu este determinată de localizarea curentă și de valoarea variabilei shell LC_COLLATE , dacă este setată. A - poate fi potrivită prin includerea acestuia ca primul sau ultimul caracter din set. A ] pot fi potrivite prin includerea lui ca primul caracter din set.

În [ și ] clasele de caractere pot fi specificate utilizând sintaxa [: class :] , unde clasa este una dintre următoarele clase definite în standardul POSIX.2:

alnum alpha ascii necompletat cntrl grafic numeric inferior imprimare punct spațiu cuvânt superior xdigit
O clasă de caractere se potrivește cu orice personaj care aparține acelei clase. Clasa de caractere cuvânt se potrivește cu literele, cifrele și caracterul _.

În [ și ] , o clasă de echivalență poate fi specificată utilizând sintaxa [= c =] , care se potrivește cu toți caracterele cu aceeași greutate de colaționare (după cum este definită de localul curent) ca caracterul c .

În [ și ] , sintaxa [. simbol .] se potrivește cu simbolul simbolului de colaționare.

În cazul în care opțiunea shell extglob este activată utilizând funcția builtin , sunt recunoscuți mai mulți operatori de potrivire a modelelor extinse. În următoarea descriere, o listă de modele este o listă a unuia sau mai multor modele separate de un | . Modelele compozite pot fi formate folosind unul sau mai multe din următoarele sub-modele:

? ( lista de modele )

Se potrivește cu zero sau cu o singură apariție a modelelor date

* ( lista de modele )

Se potrivește cu zero sau mai multe apariții ale modelelor date

+ ( lista de modele )

Se potrivește cu una sau mai multe apariții ale modelelor date

@ ( lista de modele )

Întărește exact unul dintre modelele date

! ( lista de modele )

Se potrivește cu orice, cu excepția unuia dintre modelele date

Citat Removal

După expansiunile anterioare, toate situațiile necotate ale caracterelor \ , " și " care nu au rezultat din una dintre expansiunile de mai sus sunt eliminate.

REDIRECTIONARE

Înainte de a executa o comandă, intrarea și ieșirea acesteia pot fi redirecționate folosind o notație specială interpretată de shell. Redirecționarea poate fi, de asemenea, utilizată pentru a deschide și a închide fișierele pentru mediul actual de execuție a shell-ului. Următorii operatori de redirecționare pot preceda sau să apară oriunde într-o comandă simplă sau pot urma o comandă . Redirecționările sunt procesate în ordinea în care apar, de la stânga la dreapta.

În următoarele descrieri, dacă numărul descriptorului de fișier este omis și primul caracter al operatorului de redirecționare este < , redirecționarea se referă la intrarea standard (descriptorul fișierului 0). Dacă primul caracter al operatorului de redirecționare este > , redirecționarea se referă la ieșirea standard (descriptor de fișier 1).

Cuvântul care urmează operatorului de redirecționare din următoarele descrieri, cu excepția cazurilor în care se specifică altfel, este supus extinderii extensiei, extinderii tildei, expansiunii parametrilor, înlocuirii comenzilor, extinderii aritmetice, eliminării citărilor, extinderii numelor de cale și divizării cuvintelor. Dacă se extinde la mai mult de un cuvânt, bash raportează o eroare.

Rețineți că ordinea redirecționărilor este semnificativă. De exemplu, comanda

ls > dirlist 2 > & 1

direcționează atât la ieșirea standard, cât și la eroarea standard în fișierul dirlist , în timp ce comanda

ls 2 > & 1 > dirlist

direcționează numai ieșirea standard la fișierul dirlist , deoarece eroarea standard a fost duplicată ca ieșire standard înainte ca ieșirea standard să fie redirecționată în lista de dir .

Bash se ocupă de mai multe nume de fișiere, în special atunci când sunt utilizate în redirecționări, după cum se descrie în următorul tabel:

/ dev / fd / fd

Dacă fd este un număr întreg valid, fișierul descriptor fd este duplicat.

/ dev / stdin

Descriptorul de fișiere 0 este duplicat.

/ dev / stdout

Descriptorul de fișiere 1 este duplicat.

/ dev / stderr

Descriptorul de fișiere 2 este duplicat.

/ dev / tcp / gazdă / port

Dacă gazda este un nume de gazdă sau o adresă de Internet validă și portul este un număr de port întreg sau nume de serviciu, bash încearcă să deschidă o conexiune TCP la soclul corespunzător.

/ dev / udp / gazdă / port

Dacă gazda este un nume de gazdă sau o adresă de Internet validă și portul este un număr de port întreg sau un nume de serviciu, bash încearcă să deschidă o conexiune UDP la soclul corespunzător.

Eroarea de a deschide sau de a crea un fișier determină că redirecționarea nu reușește.

Redirecționarea intrărilor

Redirecționarea intrărilor determină ca fișierul al cărui nume să rezulte din extinderea cuvântului care va fi deschis pentru citirea pe descriptorul de fișiere n sau intrarea standard (descriptorul de fișier 0) dacă n nu este specificat.

Formatul general pentru redirecționarea intrărilor este:

[ n ] < cuvânt

Redirecționarea ieșirii

Redirecționarea ieșirii determină ca fișierul al cărui nume să rezulte din expansiunea cuvântului care va fi deschis pentru scrierea pe descriptorul de fișiere n sau ieșirea standard (descriptorul de fișier 1) dacă n nu este specificat. Dacă fișierul nu există, acesta este creat; dacă există, este trunchiat la zero.

Formatul general pentru redirecționarea ieșirii este:

[ n ] > cuvânt

Dacă operatorul de redirecționare este > și opțiunea noclobber la setul încorporat a fost activată, redirecționarea va eșua dacă fișierul al cărui nume rezultă din extinderea cuvântului există și este un fișier obișnuit. Dacă operatorul de redirecționare este > | , sau operatorul de redirecționare este > și opțiunea noclobber la comanda încorporată în set nu este activată, redirecționarea este încercată chiar dacă fișierul denumit după cuvânt există.

Adăugarea unei ieșiri redirecționate

Redirecționarea ieșirii în acest mod determină ca fișierul al cărui nume să rezulte din extinderea cuvântului care va fi deschis pentru adăugarea pe descriptorul de fișiere n sau ieșirea standard (descriptorul de fișier 1) dacă n nu este specificat. Dacă fișierul nu există, acesta este creat.

Formatul general pentru adăugarea rezultatelor este:

[ n ] >> cuvânt

Redirecționarea ieșirii standard și a erorii standard

Bash permite redirecționarea atât a ieșirii standard (descriptorul de fișier 1), cât și a ieșirii de eroare standard (descriptor de fișiere 2) în fișierul al cărui nume este extinderea cuvântului cu această construcție.

Există două formate pentru redirecționarea ieșirii standard și a erorii standard:

&> cuvânt

și

> & cuvânt

Dintre cele două forme, prima este preferată. Acest lucru este echivalent semantic cu

> cuvânt 2 > & 1

Aici Documente

Acest tip de redirecționare instruiește shell-ul să citească intrarea de la sursa curentă până când este văzută o linie care conține numai cuvânt (fără semne de capăt). Toate liniile citite până la acel punct sunt apoi folosite ca intrare standard pentru o comandă.

Formatul documentelor de aici este:

<< [ - ] cuvânt aici-document delimiter

Nu se efectuează nici o expansiune a parametrilor, înlocuirea comenzilor, expansiunea aritmetică sau extinderea numelor de căi pe cuvânt . Dacă sunt citate orice caractere în cuvânt , delimitatorul este rezultatul extragerii de cuvinte pe cuvânt , iar liniile din documentul de aici nu sunt extinse. Dacă un cuvânt este necotat, toate liniile documentului de aici sunt supuse extinderii parametrilor, substituției de comandă și expansiunii aritmetice. În acest din urmă caz, secvența de caractere \ este ignorată și \ trebuie să fie folosită pentru a cita caracterele \ , $ și ` .

Dacă operatorul de redirecționare este << - , toate caracterele tabelă de conducere sunt desprinse de la liniile de introducere și linia care conține delimitatorul . Acest lucru permite ca aici documentele din scripturile shell să fie indentate într-o manieră naturală.

Aici Strings

O variantă a documentelor de aici, formatul este:

<<< cuvânt

Cuvântul este extins și furnizat comenzii la intrarea sa standard.

Duplicarea descriptorilor de fișiere

Operatorul de redirecționare

[ n ] <& cuvânt

este folosit pentru a duplica descriptorii de fișiere de intrare. Dacă cuvântul se extinde la una sau mai multe cifre, descriptorul de fișiere desemnat de n este făcut ca o copie a descriptorului de fișiere. Dacă cifrele din cuvânt nu specifică un descriptor de fișier deschis pentru intrare, apare o eroare de redirecționare. Dacă cuvântul este evaluat la - , descriptorul de fișiere n este închis. Dacă n nu este specificat, se utilizează intrarea standard (descriptor de fișier 0).

Operatorul

[ n ] > & cuvânt

este folosit în mod similar pentru a duplica descriptorii de fișiere de ieșire. Dacă n nu este specificat, se utilizează ieșirea standard (descriptor de fișier 1). Dacă cifrele din cuvânt nu specifică un descriptor de fișier deschis pentru ieșire, apare o eroare de redirecționare. Ca un caz special, dacă n este omisă și cuvântul nu se extinde la una sau mai multe cifre, ieșirea standard și eroarea standard sunt redirecționate așa cum este descris anterior.

Mutarea descriptorilor de fișiere

Operatorul de redirecționare

[ n ] <& digit -

mută descriptorul fișierului la descriptorul de fișiere n sau la intrarea standard (descriptorul fișierului 0) dacă n nu este specificat. cifra este închisă după ce a fost duplicat la n .

În mod similar, operatorul de redirecționare

[ n ] > & cifre -

mută descriptorul fișierului la descriptorul de fișiere n sau ieșirea standard (descriptorul de fișier 1) dacă n nu este specificat.

Deschiderea descriptorilor de fișiere pentru citire și scriere

Operatorul de redirecționare

[ n ] <> cuvânt

determină ca fișierul al cărui nume este extinderea cuvântului să fie deschis atât pentru citirea și scrierea pe descriptorul de fișiere n , cât și pentru descriptorul de fișiere 0 dacă n nu este specificat. Dacă fișierul nu există, acesta este creat.

pseudonime

Aliazele permit ca un șir să fie înlocuit cu un cuvânt atunci când este folosit ca primul cuvânt al unei comenzi simple. Cochilia menține o listă de pseudonime care poate fi setată și dezactivată cu comenzile alias și unalias builtin (a se vedea SHELL BUILTIN COMMANDS de mai jos). Primul cuvânt al fiecărei comenzi, dacă este necotat, este verificat pentru a vedea dacă are un alias. Dacă da, acel cuvânt este înlocuit cu textul aliasului. Numele aliasului și textul de înlocuire pot conține orice intrare shell coerentă, inclusiv metacaractele listate mai sus, cu excepția faptului că numele alias nu poate conține = . Primul cuvânt al textului înlocuit este testat pentru aliasuri, dar un cuvânt care este identic cu un alias care este extins nu este extins a doua oară. Acest lucru înseamnă că se poate alias ls- ls-F , de exemplu, și bash nu încearcă să extinde recursiv textul de înlocuire. Dacă ultimul caracter al valorii aliasului este gol , atunci cuvântul de comandă următor aliasului este de asemenea verificat pentru extinderea aliasului.

Aliasurile sunt create și listate cu comanda alias , și eliminate cu comanda unalias .

Nu există niciun mecanism pentru utilizarea argumentelor în textul de înlocuire. Dacă sunt necesare argumente, ar trebui folosită o funcție shell (vezi FUNCȚII de mai jos).

Aliasurile nu sunt extinse atunci când shell-ul nu este interactiv, cu excepția cazului în care opțiunea expand_aliases shell este setată folosind șocul (a se vedea descrierea șofatului sub SHELL BUILTIN COMMANDS de mai jos).

Normele privind definirea și utilizarea aliasurilor sunt oarecum confuze. Bash citește întotdeauna cel puțin o linie completă de intrare înainte de a executa oricare dintre comenzile de pe acea linie. Aliasurile sunt extinse când se citește o comandă, nu când se execută. Prin urmare, o definiție de pseudonim care apare pe aceeași linie ca o altă comandă nu va intra în vigoare până când nu va fi citită următoarea linie de intrare. Comenzile care urmează definiția aliasului pe acea linie nu sunt afectate de noul alias. Acest comportament este, de asemenea, o problemă atunci când funcțiile sunt executate. Aliasurile sunt extinse când se citește o definiție a funcției, nu când se execută funcția, deoarece o definiție a funcției este ea însăși o comandă compusă. Ca o consecință, aliasurile definite într-o funcție nu sunt disponibile decât după ce această funcție este executată. Pentru a fi în siguranță, întotdeauna puneți definiții de alias pe o linie separată și nu utilizați pseudonim în comenzi compuse.

Pentru aproape orice scop, pseudonimele sunt înlocuite de funcțiile shell.

FUNCȚII

O funcție de shell, definită ca cea descrisă mai sus în SHELL GRAMMAR , stochează o serie de comenzi pentru executarea ulterioară. Când numele unei funcții shell este folosit ca nume de comandă simplu, se execută lista de comenzi asociate cu numele respectivei funcții. Funcțiile sunt executate în contextul shell-ului curent; nu este creat niciun proces nou pentru a le interpreta (contrastul cu executarea unui script shell). Atunci când o funcție este executată, argumentele funcției devin parametrii poziționali în timpul execuției ei. Parametrul special # este actualizat pentru a reflecta modificarea. Parametrul 0 este neschimbat. Variabila FUNCNAME este setată la numele funcției în timp ce funcția este executată. Toate celelalte aspecte ale mediului de execuție a shell-ului sunt identice între o funcție și apelantul acesteia, cu excepția faptului că capcana DEBUG (a se vedea descrierea capcana construită sub SHELL BUILTIN COMMANDS de mai jos) nu este moștenită decât dacă funcția a fost dată atributului trace a se vedea descrierea declarației construite mai jos).

Variabilele locale funcției pot fi declarate cu comanda locală încorporată. În mod obișnuit, variabilele și valorile acestora sunt împărțite între funcție și apelantul său.

Dacă întoarcerea comenzii încorporate este executată într-o funcție, funcția se termină și execuția se reia cu următoarea comandă după apelul funcției. Când o funcție este terminată, valorile parametrilor poziționali și parametrul special # sunt restabilite la valorile pe care le-au avut înainte de execuția funcției.

Numele de funcții și definițiile pot fi enumerate cu opțiunea -f la comenzile de declarare sau scriere încorporate. Opțiunea -F pentru a declara sau a stabili va lista numai numele funcțiilor. Functiile pot fi exportate astfel incat subshell-urile sa le determine automat cu optiunea -f la exportul construit.

Funcțiile pot fi recursive. Nu se impune nicio limită a numărului de apeluri recursive.

EVALUARE ARITMETICĂ

Carcasa permite evaluarea expresiilor aritmetice, în anumite circumstanțe (a se vedea comanda construită și Extinderea aritmetică ). Evaluarea se face în numere întregi cu lățime fixă ​​fără verificarea depășirii, deși împărțirea cu 0 este prinsă și este marcată ca o eroare. Operatorii și prioritatea și asociativitatea lor sunt aceleași ca în limba C. Următoarea listă de operatori este grupată în niveluri de operatori cu prioritate egală. Nivelurile sunt listate în ordinea descrescătoare a precedenței.

id ++ id -

variabilă post-incrementare și post-decrementare

++ id - id

pre-incrementare variabilă și pre-decrementare

- +

unary minus și plus

! ~

logică și negativă

**

exponentiere

* /%

înmulțire, diviziune, restul

+ -

plus, scădere

<< >>

stânga și dreapta

<=> = <>

comparaţie

==! =

egalitatea și inegalitatea

&

bitwise AND

^

bit exclusiv OR

|

bit OR

&&

logic AND

||

logic OR

expr ? expr : expr

evaluarea condiționată

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

misiune

expr1 , expr2

virgulă

Shell variabilele sunt permise ca operandi; extinderea parametrilor este efectuată înainte de evaluarea expresiei. Într-o expresie, variabilele shell pot fi, de asemenea, menționate de nume fără a utiliza sintaxa de expansiune a parametrilor. Valoarea unei variabile este evaluată ca o expresie aritmetică atunci când este menționată. O variabilă shell nu trebuie să aibă atributul intreg activat pentru a fi utilizat într-o expresie.

Constantele cu 0 sunt interpretate ca numere octale. Un 0x sau 0X conduce înseamnă hexazecimal. În caz contrar, numerele iau forma [ base # ] n, unde baza este un număr zecimal între 2 și 64 reprezentând baza aritmetică și n este un număr în acea bază. Dacă baza # este omisă, atunci se folosește baza 10. Cifrele mai mari de 9 reprezintă literele minuscule, majusculele, @ și _, în ordinea respectivă. Dacă baza este mai mică sau egală cu 36, literele mici și majuscule pot fi folosite interchanges pentru a reprezenta numerele între 10 și 35.

Operatorii sunt evaluați în ordinea precedentă. Subexpresiile din paranteze sunt evaluate mai întâi și pot suprascrie regulile precedente de mai sus.

EXPRESII CONDIȚIONALE

Expresiile expresive sunt utilizate de comanda [[ comanda compusă și testul și comenzile [ builtin pentru a testa atributele fișierului și pentru a efectua comparații aritmetice și șir. Expresiile se formează din următoarele primare unare sau binare. Dacă orice argument de fișier al unuia dintre primare este de forma / dev / fd / n , atunci fișierul descriptor n este bifat. În cazul în care argumentul fișierului pentru unul dintre primare este unul din / dev / stdin , / dev / stdout sau / dev / stderr , descriptorul de fișiere 0, 1 sau respectiv 2 este verificat.

- un dosar

Adevărat dacă există fișier .

-b fișier

Adevărat dacă există fișier și este un fișier special bloc.

-c fișier

Adevărat dacă există fișier și este un fișier special de caractere.

-d fișier

Adevărat dacă există un fișier și este un director.

- fișier

Adevărat dacă există fișier .

-f fișier

Este adevărat dacă există fișier și este un fișier obișnuit.

- fișier

Este adevărat dacă există fișier și este set-id-group.

-h fișier

Este adevărat dacă există un fișier și este un link simbolic.

-k file

Adevărat dacă există un fișier și bitul său "lipicios" este setat.

-p file

Adevărat dacă există un fișier și este o conductă numită (FIFO).

-r fișier

Adevărat dacă există un fișier și poate fi citit.

- fișier

Este adevărat dacă fișierul există și are o dimensiune mai mare decât zero.

-t fd

Adevărat dacă descriptorul de fișiere fd este deschis și se referă la un terminal.

-u fișier

Adevărat dacă există un fișier și este setat bitul set-user-id.

- fișier

Adevărat dacă fișierul există și este scris.

-x fișier

Adevărat dacă există fișier și este executabil.

-O fișier

Adevărat dacă există fișier și este proprietatea id-ului de utilizator efectiv.

-G fișier

Adevărat dacă există un fișier și este proprietatea id-ului de grup eficient.

-L fișier

Este adevărat dacă există un fișier și este un link simbolic.

-S fișier

Adevărat dacă există un fișier și este un soclu.

-N- fișier

Adevărat dacă fișierul există și a fost modificat de la ultima citire.

fișier1 - fișier nt2

Adevărat dacă fișierul1 este mai nou (în funcție de data modificării) decât fișierul2 , sau dacă fișierul1 există și fișierul2 nu.

fișier1 - fișier2

Adevărat dacă fișierul1 este mai vechi decât fișierul2 , sau dacă fișierul2 există și fișierul1 nu.

file1-fi file2

Adevărat dacă fișierul 1 și fișierul 2 se referă la aceleași numere de dispozitiv și inode.

-o optname

Adevărat dacă optname- ul opțiunii shell este activat. Vedeți lista opțiunilor din descrierea opțiunii -o la setul de mai jos.

-z șir

Adevărat dacă lungimea șirului este zero.

-n șir

şir

Adevărat dacă lungimea șirului este diferită de zero.

string1 == string2

Adevărat dacă șirurile sunt egale. = poate fi folosit în loc de == pentru respectarea strictă a POSIX.

string1 ! = string2

Adevărat dacă șirurile nu sunt egale.

string1 < string2

Adevărat dacă șirul1 sortează înaintea string2 lexicografic în locația curentă.

string1 > string2

Adevărat dacă string1 sortează după string2 lexicografic în locația curentă.

arg1 OP arg2

OP este unul dintre -eq , -ne , -lt , -le , -gt sau -ge . Acești operatori binari aritmetici returnează adevărat dacă arg1 este egal cu, nu egal cu, mai mic decât, mai mic sau egal cu, mai mare decât sau mai mare sau egal cu arg2 , respectiv. Arg1 și arg2 pot fi numere întregi pozitive sau negative.

EXPANSIUNEA COMANDĂ SIMPLĂ

Când se execută o comandă simplă, shell-ul efectuează următoarele extinderi, alocări și redirecționări, de la stânga la dreapta.

1. Cuvintele pe care parserul le-a marcat ca asignări variabile (cele care precedă numele comenzii) și redirecționările sunt salvate pentru procesarea ulterioară.

2. Cuvintele care nu sunt alocări de variabile sau redirecționări sunt extinse. Dacă rămân cuvinte după expansiune, primul cuvânt este considerat a fi numele comenzii, iar restul cuvintelor sunt argumentele.

3. Redirecționările sunt efectuate conform descrierii de mai sus în REDIRECTION .

4. Textul după = în fiecare atribuire a variabilei este supus extensiei tilde, expansiunii parametrilor, substituției comenzilor, expansiunii aritmetice și eliminării citărilor înainte de a fi alocate variabilei.

Dacă nu rezultă niciun nume de comandă, asignările variabilei afectează mediul shell curent. În caz contrar, variabilele sunt adăugate în mediul de comandă executat și nu afectează mediul shell curent. Dacă oricare dintre asignări încearcă să atribuie o valoare unei variabile readonly, apare o eroare și comanda iese cu o stare diferită de zero.

Dacă nu rezultă niciun nume de comandă, sunt efectuate redirecționări, dar nu afectează mediul de coș curent. O eroare de redirecționare face ca comanda să iasă dintr-o stare non-zero.

Dacă există un nume de comandă rămas după expansiune, execuția continuă așa cum este descris mai jos. În caz contrar, comanda iese. Dacă una dintre extensii conține o substituție de comandă, starea de ieșire a comenzii este starea de ieșire a ultimei substituții de comandă realizate. Dacă nu au existat substituții de comandă, comanda iese cu o stare de zero.

EXECUȚIE DE COMANDĂ

După ce o comandă a fost împărțită în cuvinte, dacă rezultă o comandă simplă și o listă opțională de argumente, sunt luate următoarele acțiuni.

Dacă numele comenzii nu conține tăieturi, shell-ul încearcă să-l localizeze. Dacă există o funcție shell prin acel nume, această funcție este invocată așa cum este descris mai sus în FUNCȚII . Dacă numele nu se potrivește cu o funcție, shell-ul o caută în lista shell-urilor încorporate. Dacă se găsește o potrivire, se va invoca acea încorporată.

Dacă numele nu este nici o funcție shell, nici o funcție încorporată și nu conține nici o ștergere, bash caută fiecare element al PATH pentru un director care conține un fișier executabil cu acest nume. Bash utilizează o tabelă hash pentru a-și aminti numele de cale completă a fișierelor executabile (a se vedea hash sub SHELL BUILTIN COMMANDS de mai jos). O căutare completă a directoarelor în PATH se efectuează numai dacă comanda nu este găsită în tabela hash. Dacă căutarea nu reușește, shell-ul imprimă un mesaj de eroare și returnează o stare de ieșire de 127.

Dacă căutarea are succes sau dacă numele comenzii conține una sau mai multe tăieturi, shell-ul execută programul numit într-un mediu separat de execuție. Argumentul 0 este setat la numele dat, iar argumentele rămase la comandă sunt setate la argumentele date, dacă există.

Dacă această execuție eșuează deoarece fișierul nu este în format executabil și fișierul nu este un director, se presupune că este un script shell , un fișier care conține comenzi pentru shell. Se realizează un subshell pentru ao executa. Acest subshell se reinitializează, astfel încât efectul este ca și cum o chestie nouă ar fi fost invocată pentru a gestiona scriptul, cu excepția faptului că locațiile de comenzi memorate de părinte (a se vedea hash mai jos sub SHELL BUILTIN COMMANDS ) sunt păstrate de către copil.

Dacă programul este un fișier care începe cu #! , restul primei linii specifică un interpret pentru program. Carcasa execută interpretul specificat pe sistemele de operare care nu se ocupă de acest format executabil. Argumentele pentru interpret constau într-un singur argument opțional care urmează numele interpretului de pe prima linie a programului, urmat de numele programului, urmat de argumentele comenzii, dacă există.

COMUNITATE DE MEDIU DE EXECUȚIE

Coajă are un mediu de execuție , care constă din următoarele:

* fișierele deschise moștenite de shell la invocare, modificate de redirecționările furnizate executivului builtin

* actualul director de lucru stabilit de cd , pushd sau popd sau moștenit de shell la invocare

* masca modului de creare a fișierelor setată de umask sau moștenită de la părintele shell-ului

capcane curente stabilite de capcana

* parametrii coajă care sunt setați de asignarea variabilei sau cu setul sau moștenit de la părintele shell-ului în mediul înconjurător

* Funcțiile shell definite în timpul execuției sau moștenite de la părintele shell-ului în mediul înconjurător

* opțiuni activate la invocare (fie în mod prestabilit, fie cu argumente de linie de comandă) sau setate

* opțiuni activate de școală

* alias-uri de coajă definite cu alias

* diverse ID-uri de proces, inclusiv cele ale lucrărilor de fundal, valoarea lui $ $ și valoarea $ PPID

Atunci când o comandă simplă, alta decât o funcție încorporată sau shell, trebuie executată, ea este invocată într-un mediu separat de execuție care constă din următoarele. Dacă nu se specifică altfel, valorile sunt moștenite din coajă.

* fișierele deschise ale shell-ului, plus orice modificări și completări specificate de redirecționările comenzii

* directorul curent de lucru

* masca modului de creare a fisierelor

* variabilele de shell marcate pentru export, împreună cu variabilele exportate pentru comandă, au fost transferate în mediul înconjurător

* Capcanele prinse de shell sunt resetate la valorile moștenite de la părintele shell-ului, iar capcanele ignorate de shell sunt ignorate

O comandă invocată în acest mediu separat nu poate afecta mediul de execuție al shell-ului.

Comandarea de substituire a comenzii și comenzile asincrone sunt invocate într-un mediu subshell care este un duplicat al mediului shell, cu excepția faptului că capcanele prinse de shell sunt resetate la valorile pe care shell-ul le-a mostenit de la părintele lor la invocare. Comenzile construite care sunt invocate ca parte a unei conducte sunt, de asemenea, executate într-un mediu subshell. Modificările aduse mediului subshell nu pot afecta mediul de execuție al shell-ului.

Dacă o comandă este urmată de controlul & și funcția de control nu este activă, intrarea standard implicită pentru comandă este fișierul gol / dev / null . În caz contrar, comanda invocată moștenește descriptorii de fișiere din shell-ul apelat modificat prin redirecționări.