Zrozumienie tablic asocjacyjnych w Linux Bash z przykładami

Zrozumienie tablic asocjacyjnych w Linux Bash z przykładami
Tablice asocjacyjne to abstrakcyjny typ danych, który można uznać za słowniki lub mapy. Różnią się od innych tablic polega na tym, że utrzymują parę wartości kluczowej, w których klawisze mogą być dowolne i zdefiniowane przez użytkownika ciągami zamiast zwykłych numerów indeksu. Tablice stowarzyszone mają dwie główne właściwości:
  • Każdy klucz w tablicy może pojawić się tylko raz. Możesz myśleć o tym jako o unikalnym identyfikatorze dla użytkownika na liście.
  • Wartość może pojawić się więcej niż raz w tablicy. Na przykład dwie osoby na liście mogą mieć tę samą nazwę, ale muszą mieć różne identyfikatory użytkowników.

W tym artykule wyjaśnimy, w jaki sposób możesz zadeklarować i zainicjować tablice asocjacyjne w Linux Bash. Będziemy dalej rozwinąć siłę tablic asocjacyjnych za pomocą różnych przykładów.

Prowadziliśmy przykłady wspomniane w tym artykule na temat systemu debian 10 Buster. Jednak możesz łatwo powtórzyć na prawie wszystkich dystrybucjach Linux.

Weryfikacja warunków wstępnych

Aby używać tablic asocjacyjnych w Linux Bash, twoja wersja GNU Bash musi być równa lub wyższa niż w wersji 4. Otwórz terminal Linux, uzyskując dostęp do niego za pośrednictwem wyszukiwania uruchamiania aplikacji. Następnie wprowadź następujące polecenie, aby sprawdzić zainstalowaną wersję Bash:

$ bash --version

Moja obecna wersja Bash to 5.0.3 Więc jestem gotowy iść. W przypadku, gdy twoja wersja Bash jest mniejsza niż 4, możesz zaktualizować Bash, uruchamiając następujące polecenie jako sudo:

$ sudo apt-get instaluj-zupełnie podwyższona bash

Deklarowanie tablicy asocjacyjnej i zainicjowanie

Deklarowanie tablicy asocjacyjnej jest dość proste w Bash i można ją wykonać za pomocą polecenia DEKARE:

$ declare -a „arrayName”

W naszym przykładzie będziemy deklarować zmienną tablicy o nazwie samplearray1 w następujący sposób:

$ declare -a Samplearray1

Następnym krokiem jest zainicjowanie wymaganych wartości dla twojej tablicy. W naszym przykładzie chcemy mieć tablicę, w której wartości to kilka nazwisk, a klucze są ich odpowiednimi imionami krajowymi. Tutaj zasilamy wartości tablicy, jeden po drugim w następujący sposób:

$ ArrayName [klucz] = wartość

Przykład:

$ samplearray1 [CHN] = Chiny
$ samplearray1 [jpn] = Japan
$ samplearray1 [Kor] = Korea
$ samplearray1 [twn] = Tajwan
$ samplearray1 [th] = Tajlandia

Szybką alternatywą jest zadeklarowanie i zainicjowanie tablicy w jednym poleceniu Bash w następujący sposób:

$ declare -a arrayName = ([key1] = wartość1 [key2] = wartość2 [key3] = wartość3… . )

Oto, w jaki sposób możemy zadeklarować i zainicjować naszą wspomnianą tablicę, alternatywnie, w następujący sposób:

$ declare -a samplearray1 = ([chn] = China [jpn] = Japan [Kor] = Korea [TWN] = Tajwan
[Th] = Tajlandia)

Teraz przedstawimy kilka przykładów, które opracują, co możesz zrobić z tablicami asocjacyjnymi w Bash:

Przykład 1: Dostęp do klawiszy i wartości tablicy

W tym przykładzie wyjaśnimy, jak możesz:

  • Wydrukuj wartość w stosunku do klucza
  • Wydrukuj wszystkie klucze tablicy jednocześnie
  • Wydrukuj wszystkie wartości tablicy jednocześnie

I,

  • Wydrukuj wszystkie pary wartości kluczowej jednocześnie

Wydrukować

Możesz Wydrukuj wartość w stosunku do klucza Za pomocą następującej składni polecenia:

$ echo $ arrayName [keyname]

Oto, w jaki sposób możemy uzyskać dostęp do pełnej nazwy kraju, podając imienia kraju, od naszego samplearray1:

$ echo $ samplearray1 [chn]
$ echo $ samplearray1 [twn]

Jeśli jesteś zainteresowany Drukowanie wszystkich kluczy Z tablicy asocjacyjnej możesz to zrobić za pomocą następującej składni:

$ za klucz w „$ !ArrayName [@] "; do echo $ key; gotowe

Poniższe polecenie wydrukuje wszystkie zwroty na nazwy kraju z mojego samprearray1

Korzystanie z pętli:

$ za klucz w „$ !samplearray1 [@] "; do echo $ key; gotowe

Inną alternatywą dla drukowania wszystkich kluczy z tablicy jest użycie rozszerzenia parametrów. Następujące polecenie wydrukuje wszystkie klucze w tym samym wierszu:

$ echo "$ !samplearray1 [@] "

Jeśli jesteś zainteresowany Drukowanie wszystkich wartości macierzy jednocześnie, Możesz to zrobić, używając pętli dla dla następujących:

$ dla val w „$ arrayName [@]”; do echo $ val; zrobione

Poniższe polecenie wydrukuje wszystkie pełne nazwy krajów przechowywane w moim Samplearray1:

$ dla val w „$ samplearray1 [@]”; do echo $ val; zrobione

Inną alternatywą dla drukowania wszystkich wartości z tablicy jest użycie rozszerzenia parametrów. Następujące polecenie wydrukuje wszystkie wartości w tym samym wierszu:

$ echo "$ samplearray1 [@]"

Kolejny przydatny przykład będzie Wydrukuj wszystkie pary wartości kluczowej od razu, używając pętli dla w następujący sposób:

$ za klucz w „$ !samplearray1 [@] "; do echo" $ klucz jest skrótem dla
$ samplearray1 [$ key] "; gotowe

Możesz oczywiście sprawić, że te informacje są bardziej przydatne w twoich złożonych i znaczących skryptach Bash.

Przykład 2: Liczenie elementów tablicy

Do liczenia i wydrukowania liczby elementów w tablicy asocjacyjnej można użyć następującego polecenia:

$ echo "$ #arrayName [@]"

Wyjście następującego polecenia pokazuje, że mam pięć elementów w moim samplearray1:

$ echo "$ #samplearray1 [@]"

Przykład 3: Dodanie nowych danych w tablicy

Jeśli chcesz dodać element do tablicy po tym, jak już go zadeklarujesz i zainicjujesz, jest to składnia, którą możesz przestrzegać:

$ ArrayName+= ([key] = wartość)

W moim przykładzie chcę dodać inny kraj wraz z jego hrabstwem, więc użyję następującego polecenia:

$ samplearray1+= ([al] = Alabama)

Powtórzenie wartości tablicy sugeruje teraz, że nowy kraj jest dodawany do mojej tablicy:

$ echo "$ samplearray1 [@]"

Przykład 4: Usuwanie elementu z tablicy

Nieprzestrzegając wpisu z tablicy asocjacyjnej, możesz go usunąć jako element tablicy. Jest to możliwe użycie składni Unset, aby to zrobić:

$ Unset ArrayName [klucz]

W moim przykładzie chcę usunąć parę wartości kluczowej „al-Alabama” z mojej tablicy, więc nie uwzględnię klucza „Al” w moim poleceniu:

$ unset samplearray1 [al]

Powtórzenie wartości tablicy sugeruje teraz, że wartość klucza Al-Alabama jest teraz usuwana z mojej tablicy:

$ echo "$ samplearray1 [@]"

Przykład 5: Sprawdź, czy element istnieje w tablicy

Korzystając z stanu IF w następujący sposób, możesz sprawdzić, czy przedmiot jest dostępny w tablicy asocjacyjnej, czy teraz:

$ if [$ arrayName [SearchKey]+_]; Wtedy Echo „istnieje”; Else Echo „niedostępne”; fi

Na przykład, jeśli sprawdzę, czy niedawno usunięty element Al-Alabama istnieje w mojej tablicy, zostanie wydrukowana następująca wiadomość:

$ if [$ samplearray1 [al]+_]; Wtedy Echo „istnieje”; Else Echo „niedostępne”; fi

Jeśli sprawdzę element, który istnieje, następujący wynik zostanie wydrukowany:

$ if [$ samplearray1 [jpn]+_]; Wtedy Echo „istnieje”; Else Echo „niedostępne”; fi

Przykład 6: Usuwanie tablicy

Możesz usunąć tablicę asocjacyjną z pamięci Bash za pomocą polecenia UNSET w następujący sposób:

$ Unset ArrayName

Korzystając z następującego prostego polecenia, usunę mój samplearray1 z pamięci:

$ unset samplearray1

Teraz, kiedy próbuję wydrukować wszystkie wartości tablicy za pośrednictwem następującego polecenia, nie otrzymuję żadnego.

$ echo "$ samplearray1 [@]"

Korzystając z tych przykładów w skryptach Linux Bash, możesz użyć mocy tablic asocjacyjnych, aby osiągnąć rozwiązanie wielu złożonych problemów.