Korzystanie z tablic asocjacyjnych

Bash:
Korzystanie z tablic asocjacyjnych

Jak to zrobić:

Na początek zadeklaruj tablicę asocjacyjną w Bashu:

declare -A my_array

Następnie możesz zacząć wypełniać ją wartościami, używając ciągów znaków jako kluczy:

my_array["name"]="Linux Journal"
my_array["topic"]="Programming"

Aby uzyskać dostęp do elementu, użyj jego klucza:

echo ${my_array["name"]}  # Wypisze: Linux Journal

Iteracja po kluczach i wartościach jest również prosta:

for key in "${!my_array[@]}"; do
    echo "$key: ${my_array[$key]}"
done

Przykładowy wynik może wyglądać tak:

name: Linux Journal
topic: Programming

Aby dodać lub zmodyfikować elementy, po prostu przypisz wartość do klucza, podobnie jak przy początkowym wypełnianiu:

my_array["readers"]="You"

Aby usunąć element, użyj unset:

unset my_array["topic"]

Pogłębienie

Tablice asocjacyjne zostały wprowadzone w wersji Bash 4.0, co czyni je stosunkowo nowym dodatkiem do języka. Przed ich wprowadzeniem, obsługa tablic z indeksami innymi niż liczby całkowite była uciążliwa, często wymagając obejść lub zewnętrznych narzędzi takich jak awk lub sed.

Pod spodem Bash implementuje tablice asocjacyjne przy użyciu tablic mieszających. Ta implementacja pozwala na efektywne wyszukiwanie kluczy, które pozostaje stosunkowo stałe niezależnie od rozmiaru tablicy, co jest kluczową cechą dla wydajności wykonania skryptu.

Chociaż tablice asocjacyjne w Bash przynoszą dużo mocy i elastyczności do skryptowania w powłoce, mają one również własny zestaw ograniczeń, takich jak bycie nieco bardziej nieporęcznymi w obsłudze w porównaniu z tablicami w językach wyższego poziomu, takich jak Python lub JavaScript. Dla złożonych zadań manipulacji danymi warto rozważyć użycie zewnętrznych narzędzi lub języków bardziej odpowiednich do pracy.

Jednak dla wielu typowych zadań skryptowych, tablice asocjacyjne stanowią cenne narzędzie w zestawie Bash programisty, umożliwiając tworzenie bardziej czytelnych i łatwiejszych w utrzymaniu skryptów poprzez umożliwienie używania znaczących ciągów znaków zamiast indeksów numerycznych.