Z tego przewodnika po tablicach Bash dowiesz się, jak deklarować i pracować z tablicami indeksowanymi i asocjacyjnymi w Bash.
W Bash możesz tworzyć tablice do przechowywania kolekcji elementów. Tablice Bash to kolekcje jednowymiarowe. W językach programowania, takich jak C i C++, tablice są zbiorami elementów tego samego typu danych. Jednak w Bash, w zależności od przypadku użycia, możesz przechowywać liczby całkowite i łańcuchy w tej samej tablicy.
W tym samouczku dowiesz się, jak zadeklarować tablicę Bash i uzyskać dostęp do jej elementów. Następnie nauczysz się przeglądać elementy tablicy i dołączać elementy do tablicy. Na koniec dowiesz się o tablicach asocjacyjnych w Bash.
Zaczynajmy!
⚙ Chcesz razem kodować? Oto wymagania wstępne:
Spis treści:
Jak zadeklarować tablicę Bash
W tej sekcji poznasz składnię deklarowania tablicy Bash oraz przykłady kodu.
Składnia deklaracji tablicy Bash
Możesz zadeklarować tablicę w Bash, używając następującej składni:
$ arrayName=(elt1 elt2 ... eltN) # arrayName is the name of the array # elt1 through eltN are the N elements in the array
W powyższej składni nazwatablicy oznacza nazwę tablicy zawierającej N elementów elt1…eltN.
Elementy tablicy są ujęte w nawiasy otwierające i zamykające (). Zwróć też uwagę, że elementy tablicy są oddzielone spacją. Podobnie jak w przypadku każdej zmiennej Bash, przed operatorem przypisania = ani po nim nie powinno być spacji.
📑 W większości innych języków programowania elementy tablicy lub podobnych kolekcji oddziela się przecinkami. Ale w Bash białe znaki są separatorem.
W Bash takie tablice, w których elementy są identyfikowane przez ich indeks, nazywane są tablicami indeksowanymi.
Deklarowanie tablic indeksowanych w Bash
Stwórzmy ceny, tablicę liczb.
$ prices=(24 27 18 30 15)
Jak wspomniano w składni, liczby w tablicy cen są oddzielone spacją ujętą w nawiasy, bez spacji przed i po operatorze przypisania =.
W Bash możesz użyć polecenia echo, aby wydrukować wartość zmiennej. Użycie $variableName powoduje wydrukowanie wartości zmiennej Nazwa_zmiennej. Jednak widać, że użycie nazwy tablicy powoduje wyświetlenie tylko pierwszego elementu.
$ echo $prices 24
Tablice Bash stosują indeksowanie zerowe. Tak więc pierwszy element ma indeks 0, drugi element ma indeks 1 i tak dalej. Możesz także użyć indeksowania ujemnego; indeks ostatniego elementu tablicy to -1.
Co się stanie, jeśli spróbujesz uzyskać dostęp do elementu w określonym indeksie i wydrukować go? Spróbujmy wydrukować element o indeksie 1.
$ echo $prices[1] 24[1]
Dlaczego wyjście 24[1]? 🤔 Dzieje się tak, ponieważ Bash zastępuje $prices liczbą 24, pierwszym elementem tablicy i [1] jest drukowany jako taki.
Aby wydrukować element w określonym indeksie, możesz użyć rozwinięcia parametru postaci ${prices[index]}.
$ echo ${prices[1]} # 27 $ echo ${prices[2]} # 18
Aby wydrukować wszystkie elementy w tablicy, możesz podać @ zamiast określonego indeksu.
$ echo ${prices[@]} 24 27 18 30 15
Następnie utwórzmy tablicę ciągów znaków. Uruchomienie następującego polecenia tworzy indeksowaną tablicę:
$ declare -a fruits
Opcja -a tworzy indeksowaną tablicę. Możesz teraz wypełnić tablicę po jednym elemencie na raz, deklarując element pod określonym indeksem, jak pokazano poniżej:
$ fruits[0]="cherry" $ fruits[1]="berry" $ fruits[2]="apple" $ fruits[3]="pear" $ fruits[4]="melon" $ fruits[5]="orange"
Teraz, aby wydrukować wszystkie elementy tablicy, możesz użyć ${fruits[@]}.
$ echo ${fruits[@]} cherry berry apple pear melon orange
Uzyskaj dostęp do elementów tablicy Bash
Dostęp do elementów tablicy można uzyskać na następujące sposoby:
- Przejdź przez tablicę i uzyskaj bezpośredni dostęp do elementu
- Przejrzyj zestaw indeksów i uzyskaj dostęp do elementów w określonym indeksie
Zapętlanie elementów tablicy i dostępu
Jeśli kodowałeś w Pythonie, użyłeś pętli for używając następującej składni:
for elt in some_list: print(elt)
Teraz napiszmy odpowiednik powyższej pętli for w Bash.
Wiemy, że {ceny[@]} rozwija się do wszystkich elementów w tablicy cen. I ${ceny[@]} podaje nam wartości wszystkich elementów.
Pętla for w Bash jest podobna do składni pętli for w Pythonie, ale instrukcje w treści pętli powinny być ujęte w polecenia do i done, jak pokazano:
$ for price in ${prices[@]} > do > echo $price > done
Ponieważ używamy polecenia echo i drukujemy wartość zmiennej price, otrzymujemy następujący wynik:
# output 24 27 18 30 15
Uzyskaj dostęp do elementów za pomocą indeksu tablicy
Innym sposobem przeglądania tablic jest użycie indeksu elementów. Jest to podobne do konstrukcji pętli for w Pythonie wykorzystującej funkcję range():
for i in range(len(some_list)): print(i)
Aby uzyskać listę indeksów do przejścia, możesz umieścić wykrzyknik (!) przed nazwą tablicy w rozwinięciu parametru. To da ci listę wszystkich prawidłowych indeksów dla tablicy, jak pokazano:
$ echo ${!prices[@]} 0 1 2 3 4
Tablica cen zawiera 5 elementów, więc indeks zaczyna się od 0 i rośnie do 4.
Następnie możemy przejść przez listę indeksów i uzyskać dostęp do elementu w każdym indeksie. Dla indeksu i ${prices[i]} to element o indeksie i.
$ for i in ${!prices[@]} > do > echo ${prices[i]} > done
Powyższa pętla wypisuje wszystkie elementy tablicy.
# output 24 27 18 30 15
💬 Tutaj po uzyskaniu dostępu do każdego elementu wykonujemy prostą operację wydrukowania jego wartości. Ogólnie rzecz biorąc, możemy mieć dowolne prawidłowe przetwarzanie elementów.
Dołącz elementy do tablicy Bash
W tablicy cen mamy pięć elementów (o indeksach 0,1,2,3 i 4). Jeśli chcesz dodać element na końcu tablicy w indeksie 5, możesz to zrobić w następujący sposób:
$ prices[5]=21
Widzimy, że na końcu tablicy cen dodano liczbę 21.
$ echo ${prices[@]} 24 27 18 30 15 21
Jednak wygodniej jest dołączyć na końcu tablicy — bez zapamiętywania — indeks ostatnio dodanego elementu lub liczbę elementów znajdujących się aktualnie w tablicy.
Możesz użyć arrayName+=(elements(s)) it, aby dołączyć jeden lub więcej elementów do tablicy, jak pokazano:
$ prices+=(10)
Teraz, jeśli wydrukujemy tablicę cen, zobaczymy, że na końcu tablicy dodano 10.
$ echo ${prices[@]} 24 27 18 30 15 21 10
Następnie nauczmy się deklarować tablice asocjacyjne w Bash.
Tablice asocjacyjne w Bash
Jeśli chcesz zdefiniować relację w kategoriach par klucz-wartość, możesz użyć tablicy asocjacyjnej. Tablicę asocjacyjną można zadeklarować przy użyciu następującej ogólnej składni. Zauważ, że używamy opcji -A zamiast -a.
$ declare -A fruits_prices
Możesz dodawać elementy do tablicy asocjacyjnej, określając klucz i odpowiadającą mu wartość. Tutaj dodaliśmy nazwy owoców jako klucze i liczby z tablicy cen jako wartości.
$ fruits_prices[cherry]=24 $ fruits_prices[berry]=27 $ fruits_prices[apple]=18 $ fruits_prices[pear]=30 $ fruits_prices[melon]=15 $ fruits_prices[orange]=21
Jak więc uzyskać dostęp do elementów w tablicy asocjacyjnej?
Podobnie jak w przypadku wyszukiwania wartości za pomocą odpowiedniego klucza w słowniku Pythona, dostęp do wartości w tablicy asocjacyjnej można uzyskać za pomocą kluczy.
$ echo ${fruits_prices[berry]} # 27
Widzimy, że ${fruits_prices[@]} rozwija się do wartości i ${!fruits_prices[@]} rozwija się do klawiszy.
$ echo ${fruits_prices[@]} # Output: 18 27 21 24 30 15 $ echo ${!fruits_prices[@]} # Output: apple berry orange cherry pear melon
Uwaga: Kolejność elementów nie jest taka sama, jak kolejność ich dodawania. Dzieje się tak, ponieważ w przeciwieństwie do tablic indeksowanych tablice asocjacyjne nie są zbiorami uporządkowanymi. Zamiast tego pracują nad powiązaniami między kluczami a wartościami. Dlatego klucze są dla tablic asocjacyjnych tym, czym indeksy dla tablic indeksowych.
Możesz także przejść przez tablicę asocjacyjną i uzyskać dostęp do klawiszy, jak pokazano:
$ for key in ${!fruits_prices[@]} > do > echo $key > done
# Output apple berry orange cherry pear melon
Poniższa pętla pokazuje, jak uzyskać dostęp do wartości.
$ for value in ${fruits_prices[@]} > do > echo $value > done
# Output 18 27 21 24 30 15
Chociaż zaleca się użycie arrayName[key]=wartość, możesz również zadeklarować to jako sekwencję taką jak ta:
declare -A arrayName arrayName=(key1 value1 key2 value2 ... keyN valueN)
W ten sposób Bash określa pierwszy element jako pierwszy klucz, drugi element jako pierwszą wartość i tak dalej.
Podsumowując
Mam nadzieję, że teraz rozumiesz, jak tworzyć i pracować z tablicami Bash. Oto krótki przegląd tego, czego się nauczyłeś.
- Możesz zadeklarować indeksowaną tablicę w Bash, używając składni nazwa_tablicy=(elt1 elt2 elt3 … eltN) lub uruchomić zadeklarować -a nazwa_tablicy i dodać elementy do tablicy.
- Aby uzyskać dostęp do elementów, możesz przejść przez pętlę, używając ${arrayName[@]}. Alternatywnie możesz uzyskać listę wszystkich prawidłowych indeksów, używając rozszerzenia parametru ${!arrayName[@]}.
- Na koniec nauczyłeś się również, jak zadeklarować tablicę asocjacyjną do przechowywania par klucz-wartość w Bash.
Następnie zapoznaj się z samouczkiem dotyczącym pętli w Bash.