Tablouri în Bash

Introducere în Bash Scripting

Alex Scriven

Data Scientist

Ce este un tablou?

Două tipuri de tablouri în Bash:

  • Un tablou
    • Structură indexată numeric — tipul „normal".
    • Echivalent cu „list" în Python sau „vector" în R.

În Python: my_list = [1,3,2,4]

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

Introducere în Bash Scripting

Crearea unui tablou în Bash

Crearea unui tablou indexat numeric se poate face în două moduri în Bash.

1. Declarare fără adăugarea elementelor

declare -a my_first_array

2. Creare și adăugare de elemente simultan

my_first_array=(1 2 3)

Atenție — fără spații în jurul semnului egal!

Introducere în Bash Scripting

Atenție la virgule!

Virgulele nu se folosesc pentru a separa elementele unui tablou în Bash:

Acesta este incorect:

my_first_array=(1, 2, 3)

Acesta este corect:

my_first_array=(1 2 3)
Introducere în Bash Scripting

Proprietăți importante ale tablourilor

  • Toate elementele unui tablou pot fi returnate cu array[@]. Bash necesită acolade în jurul numelui tabloului pentru a accesa aceste proprietăți.
my_array=(1 3 5 2)
echo ${my_array[@]}
1 3 5 2
  • Lungimea unui tablou se accesează cu #array[@]
echo ${#my_array[@]}
4
Introducere în Bash Scripting

Manipularea elementelor unui tablou

Accesarea elementelor unui tablou folosind paranteze pătrate.

my_first_array=(15 20 300 42)
echo ${my_first_array[2]}
300
  • Atenție: Bash utilizează indexarea de la zero, ca Python (spre deosebire de R!)
Introducere în Bash Scripting

Manipularea elementelor unui tablou

Setați elementele tabloului folosind notația cu index.

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
  • Atenție: nu utilizați $ când suprascrieți un index, de ex. $my_first_array[0]=999 — aceasta nu funcționează.
Introducere în Bash Scripting

Manipularea elementelor unui tablou

Utilizați notația array[@]:N:M pentru a extrage un subset din tablou.

  • Aici N este indexul de start, iar M este numărul de elemente returnate.
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)
echo ${my_first_array[@]:3:2}
42 23
Introducere în Bash Scripting

Adăugarea elementelor în tablouri

Adăugați elemente la un tablou folosind array+=(elements).

Exemplu:

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
Introducere în Bash Scripting

Adăugarea (greșită) în tablouri

Ce se întâmplă dacă nu adăugați paranteze în jurul elementului de adăugat? Să vedem.

Exemplu:

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

Șirul 10 va fi adăugat la primul element. Nu este rezultatul dorit!

Introducere în Bash Scripting

Tablouri asociative

  • Un tablou asociativ
    • Similar cu un tablou normal, dar cu perechi cheie-valoare, nu indecși numerici
    • Similar cu dicționarul din Python sau lista din R
    • Notă: disponibil doar în Bash 4 și versiuni ulterioare. Unele Mac-uri moderne au Bash vechi! Verificați cu bash --version în terminal

În Python:

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

În R:

my_list = list(city_name = c('New York'), population = c(14000000))
Introducere în Bash Scripting

Crearea unui tablou asociativ

Un tablou asociativ poate fi creat doar folosind sintaxa declare (cu -A majusculă).

Puteți declara mai întâi și adăuga elementele ulterior, sau le puteți face pe o singură linie.

  • Înconjurați cheile cu paranteze pătrate și asociați o valoare după semnul egal.
    • Puteți adăuga mai multe elemente simultan.
Introducere în Bash Scripting

Exemplu de tablou asociativ

Să creăm un tablou asociativ:

declare -A city_details # Declarare

city_details=([city_name]="New York" [population]=14000000) # Adăugare elemente
echo ${city_details[city_name]} # Indexare cu cheie pentru returnarea valorii
New York
Introducere în Bash Scripting

Crearea unui tablou asociativ

Alternativ, creați și atribuiți un tablou asociativ pe o singură linie

  • Restul este identic
declare -A city_details=([city_name]="New York" [population]=14000000)

Accesați cheile unui tablou asociativ folosind !

echo ${!city_details[@]} # Returnează toate cheile
city_name population
Introducere în Bash Scripting

Să exersăm!

Introducere în Bash Scripting

Preparing Video For Download...