Susipažinkite su „Bash“ masyvais – kaip juos paskelbti, manipuliuoti ir ištrinti.
Masyvai yra duomenų saugyklos, naudojamos vertėms, turinčioms tam tikrą ryšį viena su kita, laikyti. Kitaip nei daugelyje programavimo kalbų, „Bash“ masyvai gali saugoti skirtingų duomenų tipų reikšmes tame pačiame masyve.
„Bash“ turi dviejų tipų masyvus: indeksuotus ir asociatyvius. Indeksuotų masyvų indeksai prasideda nuo 0 iki (n-1), kaip įprasta daugelyje kalbų. Tačiau Bash masyvai yra reti. Tai reiškia, kad galite priskirti (n-1) masyvo elementą nepriskirdami (n-2) elemento.
Šiame vadove sužinosite, kaip dirbti su masyvais Bash. Pradėkime.
Masyvų apibrėžimas
Bash masyvus galite apibrėžti trimis būdais. Panašiai kaip ir Bash kintamieji, masyvus reikia inicijuoti kuriant. Vienintelė išimtis yra, jei naudojate deklaruoti raktažodį. Taip pat turite įsitikinti, kad inicijuodami masyvą abiejose priskyrimo operatoriaus pusėse nepaliksite vietos.
Pirmasis metodas yra sudėtinis reikšmių priskyrimas masyvo pavadinimui. Yra du būdai tai padaryti:
arr1 = (3 5 6 7)
# or this
arr2 = ([3]=5 [1]=8 [0]=7)
Pirmajame sudėtiniame priskyrime reikšmės apvaliuose skliaustuose priskiriamos nuosekliai iš indekso [0] į [3].
Tačiau antruoju atveju reikšmės priskiriamos indeksui bet kokia tvarka, kurią nurodė programuotojas.
Susijęs: Kas yra „Linux“ aplinkos kintamieji? Viskas, ką reikia žinoti
Jei atidžiai atkreipėte dėmesį į arr2, jūs pastebėsite šį indeksą [2] buvo paliktas nuošalyje. Masyvas vis tiek bus sukurtas be jokių klaidų. Ši užduotis iš tikrųjų yra negausios saugyklos „Bash“ masyvuose demonstravimas, kaip jau minėjome anksčiau.
Atkreipkite dėmesį, kad masyvo reikšmes skiria kableliai. Vertės tiesiog atskiriamos tarpais.
Antrasis metodas netiesiogiai deklaruoja masyvą. Galite tiesiog pradėti priskirti reikšmes nuliniams masyvo elementams:
arr3[0]=Toyota
arr3[1]=Honda
arr3[2]=Mercedes
Trečias būdas yra aiškiai deklaruoti masyvą naudojant raktinį žodį deklaruoti:
declare -a arrayName
Operacijos su masyvais
Norėdami pasiekti masyvo elementus, naudokite šią sintaksę: ${masyvas[index]}
fruits=(mango banana apples)
echo${fruits[1]}# output is banana
Jei vietoj to reikia išspausdinti visą masyvą, naudokite @ simbolis kaip
indeksas apie ${masyvas[index]}:
echo${fruits[@]}
Norėdami sužinoti elementų skaičių masyve, naudokite # simbolis, kaip parodyta žemiau:
echo ${#fruits[1]}
Taip pat gali tekti keisti masyvo elementus – žr. toliau pateiktą pavyzdį, kaip tai padaryti. Tai panašu į tai, kaip pridedate naują elementą. Vienintelis skirtumas yra tas, kad jūs pakeičiate reikšmę indeksu, kuris jau turi reikšmę.
fruits[1]=pears
Asociatyviniai masyvai
Masyvas, kurio raktai turi savavališkas reikšmes, vadinamas asociatyviniu masyvu. Šie masyvai naudojami susijusioms raktų ir reikšmių poroms saugoti.
Susijęs: Kaip „Bash“ scenarijus paversti spustelėjamomis programomis naudojant „AppleScript“.
Norėdami apibrėžti asociatyvų masyvą, turite tai padaryti aiškiai naudodami raktinį žodį deklaruoti.
# associative array called animal
declare -A animal
animal[giraffe]=tall
animal[lion]=brave
animal[cheetah]=fast
Nario elementą galite pasiekti taip pat, kaip indeksuotus masyvus:
echo${animal[lion]}
Jei norite išspausdinti visas reikšmes, galite naudoti @ simbolis, kaip parodyta žemiau:
echo${animal[@]}
Jei norite išspausdinti visus masyvo raktus, galite naudoti @ ir ! simboliai, kaip parodyta toliau:
echo${!animal[@]}
Norėdami sužinoti, kiek elementų turi asociatyvus masyvas, naudokite tą pačią sintaksę, kurią naudotumėte su indeksuotais masyvais (parodyta paskutiniame skyriuje).
Jei norite ištrinti masyvo elementą arba visą masyvą, naudokite toliau pateiktą sintaksę:
unset arrayName[Key] # delete array item
unset arrayName # delete entire array
Naudojant komandą printf
Galbūt pastebėjote, kad visame šiame straipsnyje naudojama aidas komanda išvesti duomenis į apvalkalą. The aidas komanda veikia šioje pamokoje, tačiau turi nedaug funkcijų ir lankstumo, kai kalbama apie eilučių formatavimą.
Tačiau, printf komanda siūlo konkretesnes formatavimo parinktis, dėl kurių „Bash“ scenarijų kūrimas yra greitas. Mokymasis printf funkcija tikrai pagerins jūsų eilučių formatavimo patirtį ir efektyvumą Bash.