logo

Bash Scripting – Array

Polia sú dôležité pojmy v programovaní alebo skriptovaní. Polia nám umožňujú ukladať a získavať prvky vo forme zoznamu, ktorý možno použiť pre určité úlohy. V bash máme tiež polia, ktoré nám pomáhajú pri vytváraní skriptov v príkazovom riadku na ukladanie údajov vo formáte zoznamu. V tomto článku pochopíme základy polí v bash skriptovaní.

Vytváranie polí

Na vytvorenie základného poľa v bash skripte môžeme použiť deklaráciu -a príkaz, za ktorým nasleduje názov premennej poľa, ktorú chcete zadať.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball )>

ALEBO



#!/bin/usr/env bash sport[0]=football sport[1]=cricket sport[2]=hockey sport[3]=basketball>

Hodnota prvkov môže byť ľubovoľné celé číslo alebo reťazce alebo akákoľvek iná forma údajov podľa potreby. Vidíme, že pole je deklarované v bash skripte dvoma spôsobmi, prvý sa zdá byť pohodlnejší a menej hektický na deklarovanie. Ak chceme pole deklarovať naraz, prvá možnosť je optimálnou voľbou, ale ak sa majú prvky pridávať po častiach, druhá možnosť je dobrou voľbou.

Tlač polí

Ak po deklarovaní poľa chceme zobraziť všetky prvky poľa, môžeme použiť symbol @.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}'>

echo '${array_name[@]}'>

Na zobrazenie všetkých prvkov používame [@] ako index poľa. Všetky prvky sú vytlačené s oddelenými medzerami. Úvodzovky okolo premennej sa rozšíria a vytlačia všetky prvky v poli.

Iterácia cez pole

Na iteráciu poľa po jednom prvku môžeme použiť slučky a vykonávať akékoľvek operácie v jeho tele.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) for i in ${nums[@]} do echo -e '$i 
' done>

Ako vidíme, použili sme cyklus for na vytlačenie prvku z poľa jeden po druhom. V predchádzajúcej časti sme použili trik na získanie všetkých prvkov poľa a ich opakovanie jeden po druhom v slučke for. ${array_name[@]} sa rozšíri do všetkých prvkov v poli a cyklus for cez ne iteruje jeden po druhom s iterátorom v príklade je to variabilný i , vnútri tela cyklu for vytlačíme premenná/iterátor i a teda iterovať cez pole.

Získajte počet prvkov v poli

Na získanie počtu prvkov poľa môžeme použiť operátor # pred názvom poľa v s v ${array_name[@]}.

 #!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${#sport[@]}'>

Veľkosť poľa teda vrátime pomocou príkazu ${#sport[@]}, # sa používa na získanie veľkosti premennej vedľa nej, pomocou dvojitých úvodzoviek sa vyhodnotí hodnota príkazu a dostaneme požadovaný počet prvkov v poli.

Vloženie prvku do poľa

Vloženie prvku je celkom jednoduché, musíme nastaviť vhodný index prvku, za ktorým nasleduje hodnota prvku, ktorý ste chceli dať.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' sport[4]='dodgeball' sport[2]='golf' echo '${sport[@]}'>

Do poľa sme pridali 5. prvok (4. index) a tiež sme upravili/upravili 3. prvok poľa (2. index). The názov poľa[index]=hodnota sú všetky triky na pridanie, úpravu alebo inicializáciu prvkov poľa.

Prvky do poľa môžeme pridať aj pomocou operátora +=.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' sport+=('golf' 'baseball') echo '${sport[@]}' echo 'Size : ${#sport[@]}'>

Ako je vidieť v príklade, môžeme do poľa pridať viacero prvkov s minimálnym kódom. Na pridávanie prvkov do poľa používame pole názov_poľa+=(elementy).

Odstránenie prvku z poľa

Na odstránenie prvku z poľa môžeme použiť príkaz unset. Príkaz prevezme názov premennej v našom prípade názov poľa a index tohto prvku. Index môže byť aj relatívny, t. j. -1 označujúci posledný prvok a -2 k predposlednému a tak ďalej.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) unset sport[1] echo '${sport[@]}' echo '${#sport[@]}'>

Ako vidíme, nenastavený názov poľa[index] vymaže prvok na indexe z poľa. Veľkosť poľa bola tiež znížená na 3 zo 4, čo znamená, že prvok je úplne odstránený a nie len nahradený medzerami.

Použitie relatívnych indexov

Ak použijeme indexy ako -1,-2 atď., na prvky sa odkazuje od posledného prvku, a preto ich môžeme vymazať alebo upraviť v relatívnom poradí aj zozadu.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) unset sport[-3] echo '${sport[@]}'>

Ako vidíme, index 1 sa tiež označuje ako -3 zozadu, a preto je relatívne jednoduchšie odkazovať na určité prvky vo veľkom poli.

Spojte pole

Môžeme spojiť (vytiahnuť elixír) pole, aby sme ho priradili alebo vytlačili do inej premennej/pola.

#!/bin/usr/env bash declare -a sport sport+=('football' 'cricket' 'hockey' 'basketball') sport+=('golf' 'baseball') echo 'sport = ${sport[@]}' arr='${sport[@]:1:3}' echo 'arr = ${arr[@]}'>

Vybrali sme kus zo športového poľa, t. j. prvok medzi indexom 1 a 3 vrátane, a priradili sme ho premennej arr, ktorá je tiež poľom. Operátor @ získa všetky prvky z poľa a potom môžeme pole spojiť medzi indexy 1 a 3 tak, aby sme získali prvky na 1, 2 a 3 (kriket, hokej a bejzbal) zo športového poľa.

Definujte statické pole a vytlačte prvky poľa

#To declare static Array programmingArray=(Java Python Ruby Perl) #In below 2 ways we can print the elements of the static array echo 'Way 1 of printing static values by using [@]:0 - ' ${programmingarray[@]$ echo 'Way 2 of printing static values by using [*]:0 - ' ${programmingarray[*]$>

2 spôsobmi môžeme vytlačiť prvky statického poľa

Vykonávanie programu

sh So, we can give as sh arraycheck2.sh # arraycheck2.sh is the name of the script file here>

Odovzdanie argumentov príkazového riadka v súbore skriptu

#All the array elements are stored in an array called programmingArray programmingArray=('$@') #Index values start from 0 #If we do not specify the index, it will take up the size of first index value echo 'Size of programmingArray at 0th location..:' $(#programmingArray[0]} echo 'Size of programmingArray at 1st location..:' $(#programmingArray[1]}>

Vyššie uvedený skript je možné spustiť ako

# Tu sú Java, Python a Ruby argumenty príkazového riadku

kto je Freddie Mercury
sh arrayCheck.sh Java Python Ruby>

Kroky spustenia skriptu:

programmingArray=(Java Python Ruby)

#Java bude prítomná na 0. indexe, jej veľkosť sa dá vypočítať nižšie uvedeným spôsobom

${#programmingArray[0]}

Podobne Python bude prítomný na prvom indexe, jeho veľkosť sa dá vypočítať nižšie uvedeným spôsobom

${#programmingArray[1]}

Výkon:

Iterácia hodnôt poľa pomocou cyklu for

$@ poskytne všetky hodnoty, ktoré boli odovzdané prostredníctvom argumentov príkazového riadka a sú uložené v poli.

Môže sa opakovať pomocou cyklu for

declare -a programmingArray=('$@') i=0 for programming in '$@' do echo 'Array value at index ' $i ' : ' $programming i=$((i+1)); done>

Výkon:

Poďme sa rýchlo pozrieť na to, čo jednotlivé symboly predstavujú

Syntax

Výkon
arr=()

arr[0]=3 Prepísať 1. prvok

arr+=(4) Pripojiť hodnoty

str=$(ls) Uložiť výstup ls ako reťazec

arr=( $(ls) ) Uložiť výstup ls ako pole súborov

${arr[@]:s:n} Získa n prvkov počnúc indexom

#Môžeme poskytnúť súbor hodnôt

Páči sa ti to

arr=(jedna dva tri)

Na inicializáciu poľa
${arr[0]} Na získanie prvého prvku. Index vždy začína 0
${arr[@]} Na získanie všetkých prvkov a následne môžeme iterovať v slučke
${!arr[@]} Na získanie samotných indexov poľa
${#arr[@]} Na výpočet veľkosti poľa
arr[2]=3 Aby sme prepísali 3. prvok, musíme ho použiť týmto spôsobom. Keďže index začína na 0, arr[2] je správne.
arr+=(40) Ak chcete pridať hodnotu (hodnoty), môžeme použiť + a potom priradiť pomocou = a preto sa používa +=.
str=$(ls) Ak chcete uložiť výstup príkazu ls ako reťazec (pre tento výstup je zobrazený príklad 4)
arr=( $(ls) ) Ak chcete uložiť výstup ls ako pole súborov (pre tento výstup je zobrazený príklad 5)
${arr[@]:s:n} Na získanie n prvkov začínajúcich na indexe s