La fel ca majoritatea limbajelor de programare, scripturile bash trebuie uneori să se ocupe de o listă de valori asociate. Cea mai simplă formă este matricea standard.
În bash, programarea matricelor este destul de diferită, în special când vine vorba de sintaxă. Matricele Bash sunt, de asemenea, strict unidimensionale, dar au încă o mulțime de utilizări.
Sintaxa de bază a tablourilor Bash
Crearea unei matrice în bash este simplă. Puteți inițializa o întreagă matrice folosind paranteze, de exemplu:
oraș=(Londra Paris Milano „New York”)
(Puteți găsi tot codul din acest exemplu de oraș în acest GitHub Gist.)
Aceasta creează o matrice care conține patru elemente, indexate de la 0 la 3. Rețineți că a patra valoare este un șir ghilimeleu format din două cuvinte. Va trebui să citați valorile care conțin spații pentru a clarifica că nu sunt valori separate.
Puteți accesa un singur element folosind sintaxa parantezei care este comună în limbajele de programare:
oraș[2]
Deoarece acesta este bash, veți avea nevoie de câteva perfecționări pentru a utiliza efectiv valoarea într-o expresie:
- Va trebui să puneți înainte semnul dolarului ($) la numele variabilei.
- De asemenea, va trebui să folosiți bretele ({}) pentru a face ca numele variabilei să fie clar. În mod implicit, bash va trata $oraș[2] ca o variabilă numită oraș. Adăugați acolade pentru a-i spune lui bash să evalueze și parantezele și numărul de index.
Sintaxa standard de acces la matrice bash este atunci:
${variable_name[index]}
Iată un exemplu complet:
#!/bin/bash
oraș=(Londra Paris Milano „New York”)
echo ${oraș[3]}
# New York
În loc să inițializați o matrice dintr-o dată, îi puteți aloca pas cu pas. Acest script este un echivalent mai lung al exemplului anterior:
#!/bin/bash
oraș[0]=Londra
oraș[1]=Paris
oraș[2]=Milano
oraș[3]="New York"
echo ${oraș[3]}
# New York
Rețineți că, în oricare dintre cazuri, trebuie să aveți grijă să nu adăugați niciun spațiu în jurul semnului egal. „city[0] = London”, cu spații în jurul semnului egal, va genera o eroare.
Mai multe utilizări pentru matricele Bash
Matricele sunt perfecte pentru stocarea datelor conexe. Iată un script shell (foarte limitat) pentru a obține rădăcina pătrată a unui număr:
#!/bin/bash
sqrt[1]=1
sqrt[4]=2
sqrt[9]=3
sqrt[16]=4
sqrt[25]=5
eco ${sqrt[$1]}
Rețineți că scriptul folosește valoarea $1 ca index de matrice. $1 reprezintă primul argument de linie de comandă pe care îl primește scriptul, așa că puteți rula acest script astfel:
$ ./sqrt.sh 9
3
S-ar putea să fii conștient de $(cmd) sintaxă pentru a executa o comandă și a salva rezultatul acesteia într-o variabilă. Puteți combina acest lucru cu sintaxa de inițializare a matricei pentru a obține o matrice de fișiere cu care să lucrați:
arr=( $(ls) )
O matrice este adesea o structură de date perfectă pentru iterare și Bash nu face excepție. S-ar putea să parcurgeți o matrice pentru a imprima fiecare element sau pentru a efectua o operație pe fiecare membru.
Puteți adresa o matrice în A pentru.. în buclă, pentru a repeta conținutul său. De exemplu, iată o buclă simplă care tipărește numărul de linii din fiecare fișier din matrice arr:
pentru fișierul în „${arr[@]}”; do
wc -l "$fișier"
Terminat
# 3 envvars
# 547 httpd.conf
# ...
Rețineți că acest model folosește @ simbol pentru a prelua toate elementele din matrice.
Mai multă sintaxă Bash Array
Puteți obține numărul de articole dintr-o matrice folosind următoarele:
echo ${#oraș[@]}
# 4
Puteți adăuga un nou element la sfârșitul unui tablou standard astfel:
arr+=(4)
Deci, pentru a adăuga un al cincilea oraș pe listă:
oraș+=(Roma)
ecou ${oraș[@]}
# Londra Paris Milano New York Roma
Pentru a extrage o bucată dintr-o matrice, puteți utiliza o sintaxă care aproximează operația de felie a multor alte limbi:
${arr[@]:s: n}
Această sintaxă va returna o porțiune a matricei care începe la poziție s si continand n articole. Puteți omite :n parte din care extrage toate articolele s până la sfârșitul listei.
ecou ${oraș[@]:2:2}
# Milano New York
eco ${oraș[@]:3}
# New York Roma
Bash are multe caracteristici, ele necesită doar puțină învățare
Matricele în bash pot avea limitări, dar oferă aceeași funcționalitate de bază ca majoritatea limbajelor de programare. Deși bash a susținut istoric doar matrice unidimensionale simple, vremurile se schimbă. Cea mai recentă versiune de bash, 4, acceptă matrice asociative și indexarea matricelor negative.
Indiferent de versiunea de bash pe care o utilizați, este important să înțelegeți nuanțele acesteia. Chiar și sintaxa variabilă normală are o mulțime de idiosincrazii.
Variabilele Bash explicate: un ghid simplu cu exemple
Citiți în continuare
Subiecte asemănătoare
- Programare
- Linux
- Programare
- Linux Bash Shell
- Scripting
Despre autor

Bobby este un pasionat de tehnologie care a lucrat ca dezvoltator de software timp de cele mai multe două decenii. La MUO, el este Editor Junior pentru secțiunea Programare. Este pasionat de jocuri, lucrând ca redactor-șef la Switch Player Magazine și este cufundat în toate aspectele publicării online și dezvoltării web.
Aboneaza-te la newsletter-ul nostru
Alăturați-vă buletinului nostru informativ pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!
Click aici pentru a te abona