Bash Scripting – Array

Bash Scripting – Array

Pole jsou důležité pojmy v programování nebo skriptování. Pole nám umožňují ukládat a získávat prvky ve formě seznamu, který lze použít pro určité úkoly. V bash máme také pole, která nám pomáhají při vytváření skriptů v příkazovém řádku pro ukládání dat ve formátu seznamu. V tomto článku porozumíme základům polí ve skriptování bash.

Vytváření polí

K vytvoření základního pole v bash skriptu můžeme použít deklaraci -A příkaz následovaný názvem proměnné pole, kterou chcete zadat.

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

NEBO

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

Hodnota prvků může být libovolné celé číslo nebo řetězce nebo jakákoli jiná forma dat podle potřeby. Můžeme vidět, že pole je deklarováno v bash skriptu dvěma způsoby, z nichž první se zdá být pohodlnější a méně hektický. Pokud chceme pole deklarovat najednou, první je optimální volbou, ale pokud mají být prvky přidávány po částech, je to druhé dobrá volba.

Tisk polí

Po deklaraci pole, pokud bychom chtěli zobrazit všechny prvky v poli, můžeme použít symbol @.

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

echo '${array_name[@]}' 

Pro zobrazení všech prvků používáme [@] jako index pole. Všechny prvky jsou vytištěny s mezerami oddělenými, uvozovky kolem proměnné se rozšíří a vytisknou všechny prvky v poli.

Iterace přes pole

K iteraci pole po jednom prvku můžeme použít smyčky a provádět libovolné operace v jeho těle.

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

Jak vidíme, použili jsme cyklus for k vytištění prvku z pole jeden po druhém. Použili jsme trik v předchozí části, jak získat všechny prvky pole a iterovat je jeden po druhém v cyklu for. ${array_name[@]} se rozšíří do všech prvků v poli a cyklus for přes ně iteruje jeden po druhém s iterátorem v příkladu je to variabilní i , uvnitř těla cyklu for vytiskneme proměnná/iterátor i a tak iterovat přes pole.

Získejte počet prvků v poli

K načtení počtu prvků pole můžeme použít operátor # před názvem pole v s v ${array_name[@]}.

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

Vrátíme tak velikost pole pomocí příkazu ${#sport[@]}, # se používá k získání velikosti proměnné vedle ní, pomocí dvojitých uvozovek se vyhodnotí hodnota příkazu a získáme požadovaný počet prvků v poli.

Vložení prvku do pole

Chcete-li vložit prvek, je to docela jednoduché, musíme nastavit vhodný index prvku následovaný hodnotou prvku, který jste chtěli dát.

#!/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 pole jsme přidali 5. prvek (4. index) a také upravili/upravili 3. prvek pole (2. index). The arrayname[index]=hodnota jsou všechny triky, jak přidat, upravit nebo inicializovat prvky pole.

Prvky do pole můžeme také přidat pomocí operátoru +=.

#!/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[@]}' 

Jak je vidět v příkladu, můžeme do pole přidat více prvků s minimálním kódem. K připojení prvků k poli používáme pole název_pole+=(elementy).

Odstranění prvku z pole

K odstranění prvku z pole můžeme použít příkaz unset. Příkaz převezme název proměnné v našem případě název pole a index tohoto prvku. Index může být také relativní, tj. -1 označující poslední prvek a -2 k předposlednímu a tak dále.

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

Jak vidíme, unset polename[index] odstraní prvek na indexu z pole. Také velikost pole byla zmenšena na 3 ze 4, což znamená, že prvek je zcela odstraněn a není nahrazen pouze mezerami.

Použití relativních indexů

Pokud použijeme indexy jako -1,-2 atd., na prvky se odkazuje od posledního prvku, a proto je můžeme smazat nebo upravit s relativním řazením i zezadu.

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

Jak vidíme, index 1 je také označován jako -3 zezadu, a proto je relativně snazší odkazovat na určité prvky ve velkém poli.

Spojte pole

Můžeme spojit (vyjmout lektvar) pole a přiřadit je nebo vytisknout do jiné proměnné/pole.

#!/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[@]}' 

Vyjmuli jsme kus z pole sport, tj. prvek mezi indexy 1 a 3 včetně, a přiřadili jsme ho proměnné arr, která je také polem. Operátor @ získá všechny prvky z pole a pak můžeme pole spojit mezi indexy 1 a 3 tak, abychom měli prvky na 1, 2 a 3 (kriket, hokej a baseball) ze sportovního pole.

Definujte statické pole a vytiskněte prvky pole

#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 způsoby můžeme tisknout prvky statického pole

Provádění programu

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

Předání argumentů příkazového řádku v souboru 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]} 

Výše uvedený skript lze spustit jako

# Zde jsou Java, Python a Ruby argumenty příkazového řádku

sh arrayCheck.sh Java Python Ruby 

Kroky spuštění skriptu:

programmingArray=(Java Python Ruby)

#Java bude přítomna na 0. indexu, její velikost lze vypočítat níže uvedeným způsobem

${#programmingArray[0]}

Podobně Python bude přítomen na 1. indexu, jeho velikost lze vypočítat níže uvedeným způsobem

${#programmingArray[1]}

Výstup:

Iterace hodnot pole pomocí cyklu for

$@ poskytne všechny hodnoty, které byly předány pomocí argumentů příkazového řádku, a uloží se do pole.

Lze jej iterovat pomocí cyklu for

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

Výstup:

Pojďme se rychle podívat na to, co jednotlivé symboly představují

Syntax

Výstup
arr=()

arr[0]=3 Přepsat 1. prvek

arr+=(4) Přidat hodnotu(y)

str=$(ls) Uložit výstup ls jako řetězec

arr=( $(ls) ) Uložit výstup ls jako pole souborů

${arr[@]:s:n} Načte n prvků počínaje indexem

#Můžeme poskytnout sadu hodnot

takhle

arr=(jedna dva tři)

Chcete-li inicializovat pole
${arr[0]} Chcete-li získat první prvek. Index vždy začíná 0
${arr[@]} Pro načtení všech prvků a poté můžeme iterovat ve smyčce
${!arr[@]} Chcete-li získat pouze indexy pole
${#arr[@]} Pro výpočet velikosti pole
arr[2]=3 K přepsání 3. prvku jej musíme použít tímto způsobem. Protože index začíná na 0, arr[2] je správně.
arr+=(40) K připojení hodnoty (hodnot) můžeme použít + a poté přiřadit pomocí = a proto se použije +=.
str=$(ls) Chcete-li uložit výstup příkazu ls jako řetězec (pro tento výstup je uveden příklad 4)
arr=( $(ls) ) Chcete-li uložit výstup ls jako pole souborů (pro tento výstup je uveden příklad 5)
${arr[@]:s:n} Chcete-li načíst n prvků začínajících na indexu s