Arrays in Bash

Introductie tot Bash-scripting

Alex Scriven

Data Scientist

Wat is een array?

Twee soorten arrays in Bash:

  • Een array
    • 'Normale' structuur met numerieke indexen.
    • In Python 'list', in R 'vector'.

In Python: my_list = [1,3,2,4]

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

Introductie tot Bash-scripting

Een array maken in Bash

Een numeriek geïndexeerde array kun je in Bash op twee manieren maken.

  1. Declareren zonder elementen
declare -a my_first_array
  1. Maken en elementen tegelijk toevoegen
my_first_array=(1 2 3)

Onthoud: geen spaties rond het gelijkteken!

Introductie tot Bash-scripting

Let op met komma's!

Komma's scheiden in Bash geen array-elementen:

Dit is niet juist:

my_first_array=(1, 2, 3)

Dit is wel juist:

my_first_array=(1 2 3)
Introductie tot Bash-scripting

Belangrijke array-eigenschappen

  • Alle elementen geef je terug met array[@]. Let op: in Bash gebruik je accolades rond de naam bij dit soort toegang.
my_array=(1 3 5 2)
echo ${my_array[@]}
1 3 5 2
  • De lengte van een array krijg je met #array[@]
echo ${#my_array[@]}
4
Introductie tot Bash-scripting

Array-elementen bewerken

Elementen benaderen met rechte haken.

my_first_array=(15 20 300 42)
echo ${my_first_array[2]}
300
  • Let op: Bash gebruikt zero-based indexing zoals Python (maar anders dan R!)
Introductie tot Bash-scripting

Array-elementen bewerken

Stel array-elementen in met indexnotatie.

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
  • Let op: gebruik geen $ bij overschrijven van een index zoals $my_first_array[0]=999, dat werkt niet.
Introductie tot Bash-scripting

Array-elementen bewerken

Gebruik array[@]:N:M om een subset te slicen.

  • N is de startindex en M het aantal elementen.
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)
echo ${my_first_array[@]:3:2}
42 23
Introductie tot Bash-scripting

Toevoegen aan arrays

Voeg toe aan een array met array+=(elements).

Bijv.:

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
Introductie tot Bash-scripting

(Geen) toevoegen aan arrays

Wat gebeurt er zonder haakjes om wat je wilt toevoegen? Kijk mee.

Bijv.:

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

De string 10 wordt aan het eerste element geplakt. Niet wat we willen!

Introductie tot Bash-scripting

Associatieve arrays

  • Een associatieve array
    • Lijkt op een normale array, maar met key-valueparen, geen numerieke indexen
    • Vergelijkbaar met Python-dict of R-list
    • Let op: alleen beschikbaar in Bash 4+. Sommige moderne Macs hebben oude Bash! Check met bash --version in de terminal

In Python:

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

In R:

my_list = list(city_name = c('New York'), population = c(14000000))
Introductie tot Bash-scripting

Een associatieve array maken

Je maakt een associatieve array alleen met de declare-syntaxis (en hoofdletter -A).

Je kunt eerst declareren en dan toevoegen, of alles op één regel.

  • Zet 'keys' tussen rechte haken en geef na het gelijkteken de waarde.
    • Je kunt meerdere elementen tegelijk toevoegen.
Introductie tot Bash-scripting

Voorbeeld associatieve array

Laten we een associatieve array maken:

declare -A city_details # Eerst declareren

city_details=([city_name]="New York" [population]=14000000) # Elementen toevoegen
echo ${city_details[city_name]} # Indexeer met key om de waarde te krijgen
New York
Introductie tot Bash-scripting

Een associatieve array maken

Je kunt ook in één regel een associatieve array maken en vullen

  • Verder blijft alles hetzelfde
declare -A city_details=([city_name]="New York" [population]=14000000)

Toegang tot de 'keys' van een associatieve array met een !

echo ${!city_details[@]} # Geef alle keys terug
city_name population
Introductie tot Bash-scripting

Laten we oefenen!

Introductie tot Bash-scripting

Preparing Video For Download...