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:

instagram viewer
  • 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

AcțiuneTweetAcțiuneE-mail

Subiecte asemănătoare

  • Programare
  • Linux
  • Programare
  • Linux Bash Shell
  • Scripting

Despre autor

Bobby Jack (71 articole publicate)

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.

Mai multe de la Bobby Jack

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