Tablice w Bash

Wprowadzenie do skryptów Bash

Alex Scriven

Data Scientist

Czym jest tablica?

Dwa typy tablic w Bash:

  • Tablica
    • Struktura indeksowana numerycznie.
    • Odpowiednik listy w Pythonie lub wektora w R.

W Pythonie: my_list = [1,3,2,4]

W R: my_vector <- c(1,3,2,4)

Wprowadzenie do skryptów Bash

Tworzenie tablicy w Bash

Tablicę indeksowaną numerycznie można utworzyć na dwa sposoby w Bash.

1. Deklaracja bez dodawania elementów

declare -a my_first_array

2. Tworzenie i dodawanie elementów jednocześnie

my_first_array=(1 2 3)

Pamiętaj — bez spacji wokół znaku równości!

Wprowadzenie do skryptów Bash

Uwaga na przecinki!

W Bash elementy tablicy nie są oddzielane przecinkami:

To jest niepoprawne:

my_first_array=(1, 2, 3)

To jest poprawne:

my_first_array=(1 2 3)
Wprowadzenie do skryptów Bash

Ważne właściwości tablicy

  • Wszystkie elementy tablicy można zwrócić za pomocą array[@]. Bash wymaga nawiasów klamrowych wokół nazwy tablicy przy dostępie do jej właściwości.
my_array=(1 3 5 2)
echo ${my_array[@]}
1 3 5 2
  • Długość tablicy jest dostępna za pomocą #array[@]
echo ${#my_array[@]}
4
Wprowadzenie do skryptów Bash

Manipulowanie elementami tablicy

Dostęp do elementów tablicy za pomocą nawiasów kwadratowych.

my_first_array=(15 20 300 42)
echo ${my_first_array[2]}
300
  • Pamiętaj: Bash używa indeksowania od zera, jak Python (ale inaczej niż R!)
Wprowadzenie do skryptów Bash

Manipulowanie elementami tablicy

Ustawianie elementów tablicy za pomocą notacji indeksów.

my_first_array=(15 20 300 42 23 2 4 33 54 67 66)

my_first_array[0]=999
echo ${my_first_array[0]}
999
  • Pamiętaj: nie używaj $ przy nadpisywaniu indeksu, np. $my_first_array[0]=999 — to nie zadziała.
Wprowadzenie do skryptów Bash

Manipulowanie elementami tablicy

Użyj notacji array[@]:N:M, aby wyciąć podzbiór tablicy.

  • N to indeks początkowy, a M to liczba zwracanych elementów.
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)
echo ${my_first_array[@]:3:2}
42 23
Wprowadzenie do skryptów Bash

Dodawanie elementów do tablicy

Dodawanie elementów do tablicy za pomocą array+=(elements).

Na przykład:

my_array=(300 42 23 2 4 33 54 67 66)

my_array+=(10) echo ${my_array[@]}
300 42 23 2 4 33 54 67 66 10
Wprowadzenie do skryptów Bash

(Nieprawidłowe) dodawanie do tablicy

Co się stanie, jeśli nie dodasz nawiasów wokół dołączanej wartości? Sprawdźmy.

Na przykład:

my_array=(300 42 23 2 4 33 54 67 66)
my_array+=10
echo ${my_array[@]}
30010 42 23 2 4 33 54 67 66

Ciąg 10 zostanie po prostu dołączony do pierwszego elementu. Nie o to chodzi!

Wprowadzenie do skryptów Bash

Tablice asocjacyjne

  • Tablica asocjacyjna
    • Podobna do zwykłej tablicy, ale z parami klucz-wartość zamiast indeksów numerycznych
    • Odpowiednik słownika w Pythonie lub listy w R
    • Uwaga: dostępna tylko od Bash 4. Niektóre Maki mają starszą wersję Bash! Sprawdź za pomocą bash --version w terminalu

W Pythonie:

my_dict = {'city_name': "New York", 'population': 14000000}

W R:

my_list = list(city_name = c('New York'), population = c(14000000))
Wprowadzenie do skryptów Bash

Tworzenie tablicy asocjacyjnej

Tablicę asocjacyjną można utworzyć tylko za pomocą składni declare (z wielką literą -A).

Można najpierw zadeklarować tablicę, a potem dodać elementy, lub zrobić to w jednej linii.

  • Klucze umieszcza się w nawiasach kwadratowych, a wartość przypisuje po znaku równości.
    • Można dodać wiele elementów jednocześnie.
Wprowadzenie do skryptów Bash

Przykład tablicy asocjacyjnej

Utwórzmy tablicę asocjacyjną:

declare -A city_details # Declare first

city_details=([city_name]="New York" [population]=14000000) # Add elements
echo ${city_details[city_name]} # Index using key to return a value
New York
Wprowadzenie do skryptów Bash

Tworzenie tablicy asocjacyjnej

Alternatywnie można utworzyć tablicę asocjacyjną i przypisać wartości w jednej linii.

  • Reszta pozostaje bez zmian
declare -A city_details=([city_name]="New York" [population]=14000000)

Dostęp do kluczy tablicy asocjacyjnej za pomocą !

echo ${!city_details[@]} # Return all the keys
city_name population
Wprowadzenie do skryptów Bash

Czas na ćwiczenia!

Wprowadzenie do skryptów Bash

Preparing Video For Download...