Arrayer i Bash

Introduktion till Bash-skriptning

Alex Scriven

Data Scientist

Vad är en array?

Två typer av arrayer i Bash:

  • En array
    • Numeriskt indexerad struktur.
    • Kallas 'list' i Python eller 'vector' i R.

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

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

Introduktion till Bash-skriptning

Skapa en array i Bash

En numeriskt indexerad array kan skapas på två sätt i Bash.

1. Deklarera utan att lägga till element

declare -a my_first_array

2. Skapa och lägg till element samtidigt

my_first_array=(1 2 3)

Kom ihåg – inga mellanslag runt likhetstecknet!

Introduktion till Bash-skriptning

Akta dig för kommatecken!

Kommatecken används inte för att separera arrayelement i Bash:

Detta är inte korrekt:

my_first_array=(1, 2, 3)

Detta är korrekt:

my_first_array=(1 2 3)
Introduktion till Bash-skriptning

Viktiga arrayegenskaper

  • Alla arrayelement returneras med array[@]. Observera att Bash kräver klammerparenteser runt arrayens namn för att komma åt dessa egenskaper.
my_array=(1 3 5 2)
echo ${my_array[@]}
1 3 5 2
  • Arrayens längd hämtas med #array[@]
echo ${#my_array[@]}
4
Introduktion till Bash-skriptning

Manipulera arrayelement

Åtkomst till arrayelement sker med hakparenteser.

my_first_array=(15 20 300 42)
echo ${my_first_array[2]}
300
  • Kom ihåg: Bash använder nollindexering för arrayer, precis som Python (men inte R!)
Introduktion till Bash-skriptning

Manipulera arrayelement

Ange arrayelement med indexnotation.

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
  • Kom ihåg: använd inte $ när du skriver över ett index, t.ex. $my_first_array[0]=999 – det fungerar inte.
Introduktion till Bash-skriptning

Manipulera arrayelement

Använd notationen array[@]:N:M för att 'skiva' ut en delmängd av arrayen.

  • Här är N startindex och M är antal element som returneras.
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)
echo ${my_first_array[@]:3:2}
42 23
Introduktion till Bash-skriptning

Lägga till element i arrayer

Lägg till element i en array med array+=(elements).

Till exempel:

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
Introduktion till Bash-skriptning

(Fel sätt att) lägga till element

Vad händer om du inte lägger till parenteser runt det du vill lägga till? Vi ser.

Till exempel:

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

Strängen 10 läggs bara till det första elementet. Inte vad vi vill!

Introduktion till Bash-skriptning

Associativa arrayer

  • En associativ array
    • Liknar en vanlig array, men med nyckel-värde-par i stället för numeriska index
    • Liknar Pythons dictionary eller Rs list
    • Obs: Finns bara i Bash 4 och senare. Vissa moderna Mac-datorer har gammal Bash! Kontrollera med bash --version i terminalen

I Python:

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

I R:

my_list = list(city_name = c('New York'), population = c(14000000))
Introduktion till Bash-skriptning

Skapa en associativ array

En associativ array kan bara skapas med declare-syntaxen (och versalt -A).

Du kan antingen deklarera först och sedan lägga till element, eller göra allt på en rad.

  • Omge 'nycklar' med hakparenteser och tilldela ett värde efter likhetstecknet.
    • Du kan lägga till flera element på en gång.
Introduktion till Bash-skriptning

Exempel på associativ array

Vi skapar en associativ array:

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
Introduktion till Bash-skriptning

Skapa en associativ array

Du kan också skapa och tilldela en associativ array på en rad

  • Allt annat är detsamma
declare -A city_details=([city_name]="New York" [population]=14000000)

Hämta 'nycklarna' i en associativ array med !

echo ${!city_details[@]} # Return all the keys
city_name population
Introduktion till Bash-skriptning

Nu kör vi en övning!

Introduktion till Bash-skriptning

Preparing Video For Download...