Tablice

Pedros

Tablice

Jak zapewne wiecie tablice to są zmienne ułożone jedna po drugiej. Tak jak zwykłych zmiennych w BASHu nie trzeba nic deklarować jeśli chcemy użyć jakiejś tablicy. Tablice nie mają z góry ustalonych jakiś rozmiarów. Dodawanie nowych elementów do tablic to po prostu przypisanie danemu indeksowi jakąś tam wartość. Wartości można dodawać także wiele zmiennych wypisanych jedna po drugiej. Poniżej przykłady jak stworzyć tablice na obydwa sposoby:

#!/bin/sh
tablica=(element1 element2 element3)
echo ${tablica[0]}
echo ${tablica[1]}
echo ${tablica[2]}

lub

#!/bin/sh
tablica[0]=element1
tablica[1]=element2
tablica[2]=element3
echo ${tablica[0]}
echo ${tablica[1]}
echo ${tablica[2]}

W obydwu przypadkach efekt będzie identyczny, tylko od ciebie zależy jak wolisz przypisywać elementy do tablicy. Jeśli chcemy wydrukować całą zawartość tablicy to można to zrobić albo pętlą po wszystkich elementach tablicy i drukowac każdą po kolei ale można wydrukować je inaczej, np.

#!/bin/sh
tablica=(zm1 zm2 zm3)
echo ${tablica[*]}

Jak widać gwiazdka zastępuje wszystkie elementy tablicy. Zamiast * można używać także @, obydwa znaki można używać zamiennie. Czasami chcemy usunąć jakiś element tablicy. Można przypisać mu ?? ale to nie rozwiązuje problemu bo wtedy mamu dziure w tablicy. Z pomocą przychodzi nam polecenie unset.

#!/bin/sh
tablica=(zm1 zm2 zm3)
unset tablica[1]

Z tablicy zostanie usuniety element o indeksie 1. W naszym wypadku będzie to zm2 (tutaj jak w wiekszości jezyków programowania tablice indeksowane są od zera).

Gdy tablica przestaje nam być potrzebna należałoby ją usunąć. Ktoś mógłby pomyśleć, że takie rozwiązanie będzie dobre:

#!/bin/sh
tablica=(zm1 zm2 zm3)
tablica=??

albo

#!/bin/sh
tablica=(zm1 zm2 zm3)
unset tablica

W obydwu przypadkach usunięty zostanie tylko pierwszy element tablicy, w naszym przypadku tylko zm1. Tablica nadal będzie w pamięci i pozostałe elementy będą dostępne. Aby całkowicie usunąć tablice należy użyć znanego juz nam znaku * lub @, np.

#!/bin/sh
tablica=(zm1 zm2 zm3)
unset tablica[*]

Teraz tablica jest naprawdę pusta.

0 komentarzy