Indexerade arrayer
En indexerad array har ett indexvärde där ett värde finns. Vi känner igen det från nästan vilket språk som helst.
#Deklarera array
Vi kan deklarera en array på olika sätt beroende på om vi vill ge den något värde initialt eller ej.
#!/usr/bin/env bash
#
# An example script on declaring arrays
# with keyword declare
declare -a rocky_planets
# or create empty array
rocky_planets=()
#Lägga till värde i arrayen
Vi kan lägga till elementen direkt eller via index. Vi kan även lägga till element i början, i slutet eller på en bestämd plats:
#!/usr/bin/env bash
#
# An example script on adding elements to arrays
# in declaration, separated by space
rocky_planets=("Mercury" "Venus")
# or by index
rocky_planets[2]="Earth"
# or by appending
rocky_planets+=("Mars")
# or by prepending
rocky_planets+=("The Sun" "${rocky_planets[@]}")
#Ta bort element
Nu fick vi ju med ett element för mycket då solen inte är en sten-planet. Vi kan ta bort det första elementet och rätta till indexeringen med lite trolleri:
#!/usr/bin/env bash
#
# An example script on removing item from array
# Remove first element by extracting (index 0 will be Mercury)
rocky_planets=("${rocky_planets[@]:1}")
#Hantera arrayen
Det kan vara lite speciellt att hantera en array. Vi kikar på hur vi kan arbeta med den.
#!/usr/bin/env bash
#
# An example script on working with arrays
rocky_planets=("Mercury" "Venus" "Earth" "Mars")
# Get one element by index
echo "First element: ${rocky_planets[0]}"
# Get all elements
echo "All elements: ${rocky_planets[*]}"
# Get size
echo "Size of array: ${#rocky_planets[@]}"
# Get size of element in array
echo "Size of second element: ${#rocky_planets[1]}"
# Get indices
echo "Indices: ${!rocky_planets[*]}"
# Extract part of array
echo "2 elements from index 1: ${rocky_planets[*]:1:2}"
# Extract part of item in array
echo "First 2 characters from third element: ${rocky_planets[2]:0:2}"
Notera att det i vissa fall används *
istället för @
. Det fungerar i stort sett likadant, dock så kan man få valideringsfelet:
Argument mixes string and array. Use * or separate argument.
Det handlar om att @
lagrar alla element separat och *
lagrar dem som ett argument. Bygger vi på en sträng kan det bli tokigt med @
.
Vi tittar närmare på det när vi kommer till funktioner och argument.
#Loopa igenom arrayen
En array är ju en utmärkt struktur för att bli itererad.
#!/usr/bin/env bash
#
# An example script on looping arrays
rocky_planets=("Mercury" "Venus" "Earth" "Mars")
# for loop - get items
for planet in "${rocky_planets[@]}"
do
echo "$planet"
done
# for loop - work with indices
for index in "${!rocky_planets[@]}"
do
echo "Index: $index is ${rocky_planets[$index]}"
done
#Revision history
- 2019-03-08: (A, lew) Första versionen.