Spoznajte nize Bash – kako jih deklarirati, manipulirati z njimi in jih izbrisati.
Nizi so shrambe podatkov, ki se uporabljajo za shranjevanje vrednosti, ki so med seboj povezane. Za razliko od večine programskih jezikov lahko nizi Bash shranijo vrednosti različnih tipov podatkov v isti niz.
Bash ima dve vrsti matrik: indeksirane matrike in asociativne matrike. Pri indeksiranih nizih se indeksi začnejo od 0 do (n-1), kot je običajno v večini jezikov. Vendar pa so nizi v Bashu redki. To pomeni, da lahko dodelite (n-1)-ti element polja, ne da bi dodelili (n-2)-ti element.
V tej vadnici se boste naučili delati z nizi v Bashu. Začnimo.
Definiranje nizov
Obstajajo trije načini, kako lahko definirate nize v Bashu. Podobno kot pri spremenljivkah Bash je treba nize inicializirati ob ustvarjanju. Edina izjema pri tem je, če uporabljate izjaviti ključna beseda. Prepričati se morate tudi, da med inicializacijo matrike na obeh straneh operatorja dodelitve ni prostora.
Prva metoda je sestavljena dodelitev vrednosti imenu matrike. To lahko storite na dva načina:
arr1 = (3 5 6 7)
# or this
arr2 = ([3]=5 [1]=8 [0]=7)
Pri prvi sestavljeni dodelitvi so vrednosti v okroglih oklepajih dodeljene zaporedno od indeksa [0] do [3].
Vendar pa so v drugem primeru vrednosti dodeljene indeksu v katerem koli vrstnem redu, ki ga je navedel programer.
Sorodno: Kaj so spremenljivke okolja v Linuxu? Vse, kar morate vedeti
Če ste natančno opazili arr2, boste opazili ta indeks [2] je bil izpuščen. Matrika bo še vedno ustvarjena brez vrženih napak. Ta dodelitev je pravzaprav predstavitev redkega shranjevanja v nizih Bash, kot smo se dotaknili prej.
Upoštevajte, da vrednosti matrike ne ločujejo vejice. Vrednosti so preprosto ločene s presledki.
Druga metoda posredno deklarira matriko. Lahko preprosto začnete dodeljevati vrednosti elementom ničelne matrike:
arr3[0]=Toyota
arr3[1]=Honda
arr3[2]=Mercedes
Tretji način je eksplicitna deklaracija matrike s ključno besedo izjaviti:
declare -a arrayName
Operacije nad nizi
Za dostop do elementov polja uporabite to sintakso: ${matrika[indeks]}
fruits=(mango banana apples)
echo${fruits[1]}# output is banana
Če morate namesto tega natisniti celotno matriko, uporabite @ simbol kot
kazalo od ${matrika[indeks]}:
echo${fruits[@]}
Če želite ugotoviti število elementov v matriki, uporabite # simbol, kot je prikazano spodaj:
echo ${#fruits[1]}
Morda boste morali spremeniti tudi elemente polja – glejte spodnji primer, kako to storite. Podobno je dodajanju novega elementa. Edina razlika je v tem, da zamenjate vrednost z indeksom, ki že ima vrednost.
fruits[1]=pears
Asociativni nizi
Niz, ki ima za ključe poljubne vrednosti, se imenuje asociativni niz. Ti nizi se uporabljajo za shranjevanje povezanih parov ključ-vrednost.
Sorodno: Kako skripte Bash spremeniti v aplikacije, ki jih je mogoče klikniti, z uporabo AppleScript
Če želite definirati asociativno polje, morate to storiti izrecno s ključno besedo izjaviti.
# associative array called animal
declare -A animal
animal[giraffe]=tall
animal[lion]=brave
animal[cheetah]=fast
Do elementa člana lahko dostopate na enak način kot do indeksiranih nizov:
echo${animal[lion]}
Če želite natisniti vse vrednosti, lahko uporabite @ simbol, kot je prikazano spodaj:
echo${animal[@]}
Če želite natisniti vse matrične ključe, lahko uporabite @ in ! simboli, kot je prikazano spodaj:
echo${!animal[@]}
Če želite ugotoviti število elementov, ki jih ima asociativno polje, uporabite isto sintakso, kot bi jo uporabili z indeksiranimi nizi (prikazano v zadnjem razdelku).
Če želite izbrisati element polja ali celotno polje, uporabite spodnjo sintakso:
unset arrayName[Key] # delete array item
unset arrayName # delete entire array
Uporaba ukaza printf
Morda ste opazili, da ta celoten članek uporablja odmev ukaz za izpis podatkov v lupino. The odmev ukaz deluje za to vadnico, vendar ima malo funkcij in prilagodljivosti, ko gre za oblikovanje nizov.
Vendar pa je printf ponuja bolj specifične možnosti oblikovanja, zaradi katerih je skriptiranje Bash preprosto. Učenje printf funkcija bo zagotovo izboljšala vašo izkušnjo oblikovanja nizov in učinkovitost v Bashu.