Arrays

Deklaration

Names=('Ruven' 'Lucy' 'Niklas' 'Tom') # Achtung: Keine Kommata aber Leerzeichen
Names[3]='Tim' # Überschreibung von 'Tom' zu 'Tim'!
# ('Ruven' 'Lucy' 'Niklas' 'Tim')

Zugriff

Arrays sind auch hier, wie gewohnt, über den Index ansprechbar und beginnen mit 0

echo "${Names[0]}" # Erstes Element (Ruven)
echo "${Names[-1]}" # Letztes Element (Tim)
echo "${Names[@]}" # Alle Elemente, mit Leerzeichen getrennt (Ruven Lucy Niklas Tim)
echo "${#Names[@]}" # Anzahl an Elementen (4)
echo "${#Names}" # Stringlänge des ersten Elements (5)
echo "${#Names[2]}" # Stringlänge des angegebenen Elements (6)
echo "${Names[@]:1:2}" # Range von Position 1, Länge 2 (Lucy, Niklas)
echo "${!Names[@]}" # Alle Keys, mit Leerzeichen getrennt (0 1 2 3)

Array Operationen

Names=("${Names[@]}" "Shelly") # Push
Names+=('Shelly') # Auch Push
unset Names[3] # Entfernt ein bestimmtes Element
Names=("${Names[@]/T*/}") # Entfernt alle Regex Matches
Names2=("${Names[@]}") # Duplizieren
Names3=("${Names[@]}" "${Names2}") # Konkatenieren
Lines=($(cat 'logfile.log')) # Zeilen von logfile.log als Array

Arrays sind also mehr oder weniger einfach nur Elemente, mit Leerzeichen getrennt

Iteration

for i in "${arrayName[@]}";
do
    echo $i
done

Dictionary

Dictionaries funktionieren im Prinzip genau wie Arrays, nur, dass sie keine Zahlen, sondern Strings als Keys haben.

Deklaration

Die Deklaration erfolgt durch declare:
declare -A <name>
-A wie Associative Array

Beispiel

declare -A sounds
sounds[wolf]="howl"
sounds[bird]="tweet"
sounds[fox]="???"

# Mini-Übersicht
echo "${sounds[fox]}" # ???
echo "${sounds[@]}" # Alle Values (howl tweet ???)
echo "${!sounds[@]}" # Alle Keys (wolf bird fox)