Android

Bash-matriser

Bash Tutorial 6: Arrays

Bash Tutorial 6: Arrays

Innehållsförteckning:

Anonim

Matriser är en av de mest använda och grundläggande datastrukturerna. Du kan tänka på att en matris är en variabel som kan lagra flera variabler i den., vi täcker Bash-matriserna och förklarar hur du använder dem i dina Bash-skript.

Bash Arrays

Bash stöder endimensionella numeriskt indexerade och associerande matriser. Numeriska matriser refereras med hjälp av heltal, och associerande refereras med strängar.

Numeriskt indexerade matriser kan nås från slutet med hjälp av negativa index, indexet -1 refererar till det sista elementet. Indexen behöver inte vara sammanhängande.

Till skillnad från de flesta programmeringsspråk behöver Bash-arrayelement inte vara av samma datatyp. Du kan skapa en matris som innehåller både strängar och siffror.

Bash stöder inte flerdimensionella matriser, och du kan inte ha matriselement som också är matriser.

Det finns ingen gräns för det maximala antalet element som kan lagras i en matris.

Skapa Bash Arrays

Arrays in Bash kan initialiseras på olika sätt.

Skapa numeriskt indexerade matriser

Basvariabler är inte skrivna, alla variabler kan användas som en indexerad matris utan att deklarera det.

För att uttryckligen förklara en matris använder du deklarationen inbyggd:

declare -a array_name

Ett sätt att skapa en indexerad matris är genom att använda följande form:

array_name=value_1 array_name=value_2 array_name=value_n

Där index_* är ett positivt heltal.

Ett annat sätt att skapa en numerisk grupp är att ange listan över element inom parentes, åtskilda med tomt utrymme:

array_name=(element_1 element_2 element_N)

När matrisen skapas med hjälp av formuläret ovan börjar indexering på noll, dvs. det första elementet har ett index på 0 .

Skapa associerande matriser

Till skillnad från numeriskt indexerade måste de associerande matriserna deklareras innan de kan användas.

För att förklara en associerande grupp använder du declare inbyggd med alternativet -A (versaler):

declare -A array_name

Associerande matriser kan skapas med följande formulär:

declare -A array_name array_name=value_foo array_name=value_bar array_name=value_xyz

Där index_* kan vara vilken sträng som helst.

Du kan också skapa en associerande matris med hjälp av formuläret nedan:

declare -A array_name array_name=(=value_foo =value_bar =value_xyz)

Array-operationer

Basharrays-syntax kan se lite konstigt ut i början, men det kommer att vara mer meningsfullt när du läser den här artikeln.

Referenselement

För att referera till ett enda element måste du känna till elementindex.

Alla element kan refereras med följande syntax:

${array_name} Syntaxen för åtkomst till ett arrayelement liknar syntaxen för de flesta programmeringsspråk. De lockiga hängslen ${} krävs för att undvika skalets expansionsoperatörer för filnamn.

Låt oss skriva ut elementet med index på 1 :

## declare the array declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## print element echo ${my_array}

Helium

## declare the array declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## print all elements echo "${my_array}"

Hydrogen Helium Lithium Beryllium

Den enda skillnaden mellan @ och * är när formen ${my_array} är omgiven av dubbla citat. I det här fallet expanderar * till ett enda ord där matriselement separeras med mellanslag. @ expanderar varje matriselement till ett separat ord. Detta är särskilt viktigt när du använder formuläret för att analfestera genom matriselement.

Lägg till ! För att skriva ut tangenterna i matrisen ! operatör före matrisnamnet:

${!array_name}

Här är ett exempel:

## declare the array declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## print all elements echo "${!my_array}"

0 1 2 3

Array Längd

För att få längden på en matris använder du följande formulär:

${#array_name} Syntaxen är densamma som när man refererar till alla element med tillägg av tecknet # före matrisnamnet.

## declare the array declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## array Length echo ${#my_array}

4

Slinga genom matrisen

Det vanligaste sättet att iterera över varje objekt i en matris är genom att använda for-loop:

declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## Array Loop for i in "${my_array}" do echo "$i" done

Koden ovan kommer att iterera över matrisen och skriva ut varje element i en ny rad:

Hydrogen Helium Lithium Beryllium

Här är ett exempel på hur du skriver ut alla nycklar och värden:

declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## Array Loop for i in "${!my_array}" do echo "$i" "${my_array}" done

0 Hydrogen 1 Helium 2 Lithium 3 Beryllium

Ett annat sätt att gå igenom en matris är att få längden på matrisen och använda C style stilslingan:

declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") # Length of the array length=${#my_array} # Array Loop for ((i=0; i < ${length}; i++)) do echo $i ${my_array} done

0 Hydrogen 1 Helium 2 Lithium 3 Beryllium

Lägg till ett nytt element

För att lägga till ett nytt element i en bash array och ange dess index använder du följande form:

my_array="New Element"

Här är ett exempel:

declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## add new element my_array="Aluminum" ## print all elements echo "${my_array}"

Hydrogen Helium Lithium Beryllium Aluminum

Ett annat sätt att lägga till ett nytt element i en matris utan att ange indexet är att använda += operatören. Du kan lägga till ett eller flera element:

declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## add new elements my_array+=(Cobalt Nickel) ## print all elements echo "${my_array}"

Hydrogen Helium Lithium Beryllium Cobalt Nickel

Radera ett element

För att radera ett enda element måste du känna till elementindexet. Ett element kan tas bort med kommandot unset :

unset my_array

Låt oss se ett exempel:

declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## remove element unset my_array ## print all elements echo "${my_array}"

Hydrogen Helium Beryllium

Slutsats

Vi har förklarat hur man skapar numeriskt indexerade och associerande matriser. Vi har också visat hur man kan iterera genom matriserna, beräkna arrayens längd och lägga till och ta bort element.

bash terminal