Kot večina programskih jezikov se morajo skripti bash včasih ukvarjati s seznamom povezanih vrednosti. Najenostavnejša oblika je standardni niz.
V bash je programiranje nizov precej drugačno, zlasti kar zadeva sintakso. Bash nizi so tudi strogo enodimenzionalni, vendar imajo še vedno veliko uporab.
Osnovna sintaksa nizov Bash
Ustvarjanje matrike v bash je preprosto. Celotno matriko lahko inicializirate z oklepaji, na primer:
city=(London Pariz Milan "New York")
(Vso kodo iz tega primera mesta najdete v ta GitHub Gist.)
To ustvari matriko, ki vsebuje štiri elemente, indeksirane od 0 do 3. Upoštevajte, da je četrta vrednost niz v narekovajih, sestavljen iz dveh besed. Za pojasnitev, da niso ločene vrednosti, boste morali navesti vrednosti, ki vsebujejo presledke.
Do enega elementa lahko dostopate s sintakso oklepajev, ki je običajna v programskih jezikih:
mesto[2]
Ker je to bash, boste potrebovali nekaj izboljšav, da dejansko uporabite vrednost v izrazu:
- Pred znakom dolarja boste morali dodati ($) na ime spremenljivke.
- Prav tako boste morali uporabiti naramnice ({}), da bo ime spremenljivke nedvoumno. Privzeto bo obravnaval bash $city[2] kot spremenljivka z imenom mesto. Dodajte oklepaje, da bash sporočite, naj oceni tudi oklepaje in indeksno številko.
Standardna sintaksa za dostop do niza bash je potem:
${variable_name[index]}
Tukaj je popoln primer:
#!/bin/bash
city=(London Pariz Milan "New York")
odmeva ${city[3]}
# New York
Namesto da inicializirate matriko naenkrat, ji lahko dodelite korak za korakom. Ta skript je daljši ekvivalent prejšnjega primera:
#!/bin/bash
mesto[0]=London
mesto[1]=Pariz
mesto[2]=Milano
mesto[3]="New York"
odmeva ${city[3]}
# New York
Upoštevajte, da morate v obeh primerih paziti, da ne dodate presledka okoli znaka enakosti. “city[0] = London” s presledki okoli znaka enakosti bo ustvarilo napako.
Več uporab za nize Bash
Nizi so kot nalašč za shranjevanje povezanih podatkov. Tukaj je (zelo omejen) skript lupine, da dobite kvadratni koren števila:
#!/bin/bash
sqrt[1]=1
sqrt[4]=2
sqrt[9]=3
sqrt[16]=4
sqrt[25]=5
odmev ${sqrt[$1]}
Upoštevajte, da skript uporablja vrednost $1 kot indeks matrike. $1 predstavlja prvi argument ukazne vrstice, ki ga prejme skript, zato lahko ta skript zaženete takole:
$ ./sqrt.sh 9
3
Morda se zavedate $(cmd) sintakso, da izvedete ukaz in shranite njegov izhod v spremenljivko. To lahko kombinirate s sintakso inicializacije matrike, da dobite niz datotek za delo:
arr=( $(ls) )
Niz je pogosto popolna podatkovna struktura za ponavljanje in Bash ni izjema. Lahko se pomaknete skozi matriko, da natisnete vsak element ali izvedete operacijo na vsakem članu.
Lahko naslovite polje v a za.. v zanka, da preberete njegovo vsebino. Tukaj je na primer preprosta zanka, ki natisne število vrstic v vsaki datoteki v matriki prir:
za datoteko v "${arr[@]}"; narediti
wc -l "$file"
Končano
# 3 envvars
# 547 httpd.conf
# ...
Upoštevajte, da ta vzorec uporablja @ simbol za pridobivanje vseh elementov iz matrike.
Več sintakse niza Bash
Število elementov v nizu lahko dobite z naslednjim:
odmeva ${#city[@]}
# 4
Na konec standardnega niza lahko dodate nov element tako:
arr+=(4)
Torej, če želite na seznam dodati peto mesto:
mesto+=(Rim)
odmeva ${city[@]}
# London Pariz Milano New York Rim
Če želite izvleči kos matrike, lahko uporabite sintakso, ki približa operaciji rezine mnogih drugih jezikov:
${arr[@]:s: n}
Ta sintaksa bo vrnila rezino matrike, ki se začne na položaju s in vsebuje n predmetov. Lahko izpustite :n del, iz katerega izvlečete vse predmete s do konca seznama.
odmeva ${city[@]:2:2}
# Milan New York
odmeva ${city[@]:3}
# New York Rim
Bash ima veliko funkcij, le nekaj se jih je treba naučiti
Nizi v bash imajo lahko omejitve, vendar ponujajo enako osnovno funkcionalnost kot večina programskih jezikov. Čeprav je bash v preteklosti podpiral le preproste enodimenzionalne nize, se časi spreminjajo. Najnovejša različica bash, 4, podpira asociativne nize in negativno indeksiranje nizov.
Ne glede na to, katero različico bash uporabljate, je pomembno razumeti njene nianse. Tudi običajna spremenljivka sintaksa ima veliko posebnosti.
Razložene spremenljivke Bash: preprost vodnik s primeri
Preberite Naprej
Povezane teme
- Programiranje
- Linux
- Programiranje
- Linux Bash Shell
- Skriptiranje
O avtorju

Bobby je tehnološki navdušenec, ki je večino dveh desetletij delal kot razvijalec programske opreme. Pri MUO je mlajši urednik oddelka za programiranje. Navdušen je nad igranjem iger, dela kot glavni urednik pri reviji Switch Player Magazine in je potopljen v vse vidike spletnega založništva in spletnega razvoja.
Naročite se na naše novice
Pridružite se našemu glasilu za tehnične nasvete, ocene, brezplačne e-knjige in ekskluzivne ponudbe!
Kliknite tukaj, da se naročite