Cum se returnează o valoare din funcția bash, note zen

După cum știți, în bash toate funcțiile și comenzile returnează numai codul de returnare (zero - reușită de succes, non-zero - eroare). Pentru a returna ceva diferit de număr, trebuie să utilizați una dintre următoarele tehnici:







  • stabilirea unei variabile globale
  • utilizați substituția (citiți ieșirea comenzii)
  • trecând o referință indirectă la o funcție

Să analizăm în detaliu cum să folosim aceste abordări.

Stabilirea unei variabile globale

Ce ar putea fi mai simplu decât ascunderea domeniului global într-o funcție și apoi scoaterea datelor din programul principal?

Este de înțeles, deoarece toate variabilele din bash sunt implicite la nivel global.

Folosind substituția, aka $ (funcția)

Destul de un mecanism comun. Esti deja, sigur, fara sa stii asta, folosind-o in mod repetat. Ideea este că stocăm tot ce se transmite printr-o anumită comandă (funcția este, de asemenea, o comandă). Și, bineînțeles, că, fără a fi nevoie să nu se blocheze domeniul de aplicare global, se recomandă utilizarea variabilelor locale.

Trimiterea unei referințe indirecte (referințe indirecte) la o funcție

Cel mai interesant, funcțional și incomod mecanism :)
Este mai ușor să vezi 1 timp decât auzi de 100 de ori:

Și acum sincer și în ordine

Spre deosebire de alte limbi de programare, în script-urile bash, parametrii dintr-o funcție sunt trecuți de obicei prin valoare. Dacă numele variabilei (care sunt de fapt pointeri) sunt transmise funcției ca parametri, acestea vor fi tratate ca literali de șir.






Funcțiile se ocupă de argumentele lor ca și literali.

Variabilele reprezintă o modalitate de prezentare a datelor în diferite limbi de programare. Variabila nu este mai mult decât o etichetă - numele atribuit zonei sau grupului de zone de memorie ale computerului în care sunt conținute datele.

Numele variabilei este "containerul" pentru stocarea valorii datelor. Un acces la o valoare (obținerea unei valori) a unei variabile se numește substituire a unei variabile.

Rețineți că trebuie să faceți distincția între numele variabilei și valoarea acesteia. Dacă variabila1 este numele variabilei, variabila $ se referă la valoare. pe care le conține.

După cum sa menționat mai sus, după ce variabila (referindu-se la o variabilă $ Var) este înlocuită, obținem o valoare. la care indică variabila. Și ceea ce înseamnă semnificația în sine. $$ var. Vă amintiți că, cu variabile, lucrăm la fel ca la literali. ) Ei bine, aici încercăm să obținem valoarea indicată de o variabilă al cărei nume este, de asemenea, o valoare a altei variabile. Un pic confuz, dar, sper, prins.

Exemplul 1. Pentru înțelegere

Exemplul 2. Practic

Deoarece numele variabilei în sine este stocat într-o variabilă, nu îl putem instala direct. Pentru a face acest lucru, utilizați eval. Dacă pe scurt, eval spune interpreterului bash că este necesar să interpretezi șirul de două ori. Prima dată când se va seta rezultatul = 'some value'. iar în al doilea - variabila necesară (care a fost trecut ca argument).

Când salvați numele variabilei, care a fost transmis ca argument al liniei de comandă, asigurați-vă că îl salvați local și într-o variabilă cu un nume excelent (dacă este posibil), decât să fiți utilizat pe linia de comandă. Dacă nu faceți acest lucru și numele variabilei trecut ca parametru de linie de comandă se potrivește cu numele variabilei locale în care stocați valoarea, nimic nu va funcționa: D

Exemplul 3. Nu funcționează!

De ce? Ei bine. în momentul în care eval comite oa doua substituire în rezultatul = 'some value'. rezultatul este deja o variabilă locală a funcției, deci o vom instala din nou, nu variabila necesară.

Pentru o mai mare flexibilitate, puteți combina diferite abordări:

Exemplul 4. Universal

Ie dacă niciun parametru nu este trecut la funcție, valoarea este pur și simplu ieșită la stdout.







Articole similare

Trimiteți-le prietenilor: