Przewodnik po tablicach Bash

Opublikowany: 2022-12-30

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:

  • Jeśli korzystasz z komputera Mac lub Linux, możesz otworzyć terminal i kodować razem.
  • Jeśli korzystasz z komputera z systemem Windows, zainstaluj Git Bash lub Windows Subsystem for Linux (WSL2).

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 arrayName 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 prices , tablicę liczb.

 $ prices=(24 27 18 30 15)

Jak wspomniano w składni, liczby w tablicy prices 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 variableName . 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 to 24 [1]? Dzieje się tak dlatego, że Bash zastępuje $prices liczbą 24, pierwszym elementem tablicy, i jako takie jest drukowane [1].

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

bash-array-access-elements

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 {prices[@]} rozwija się do wszystkich elementów w tablicy prices . A ${prices[@]} daje 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 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 prices 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]} jest elementem 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

Przewodnik po tablicach Bash

W tablicy prices 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ę prices , 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, a ${!fruits_prices[@]} do kluczy.

 $ 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 indeksowanych.

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]=value , 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 arrayName=(elt1 elt2 elt3 ... eltN) lub uruchomić declare -a arrayName i dodaj elementy do tablicy.
  • Aby uzyskać dostęp do elementów, możesz wykonać 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.