Bash Arrays

Bash Arrays werden seltener genutzt als sie sollten. Sobald man mehrere zusammenhängende Werte in einem Script verwaltet sind sie die richtige Wahl.

Array erstellen

server=("web1" "web2" "web3")

Oder einzeln befüllen.

server[0]="web1"
server[1]="web2"

Zugriff

echo "${server[0]}"        # web1
echo "${server[@]}"        # alle Elemente
echo "${#server[@]}"       # Anzahl
echo "${server[@]:1:2}"    # Slice: ab Index 1, 2 Elemente

Über ein Array iterieren

for s in "${server[@]}"; do
    echo "Deploye auf $s"
    ssh "$s" "/usr/local/bin/deploy.sh"
done

Element hinzufügen

server+=("web4")

Array aus Befehlsausgabe

dateien=($(find /var/log -name "*.log" -mtime +7))

Bei Leerzeichen in Dateinamen lieber mapfile nutzen.

mapfile -t dateien < <(find /var/log -name "*.log" -mtime +7)

Assoziatives Array

declare -A config
config["host"]="localhost"
config["port"]="3306"
config["name"]="meinedb"

echo "${config["host"]}"

for key in "${!config[@]}"; do
    echo "$key = ${config[$key]}"
done

${!config[@]} gibt alle Schlüssel zurück.

Arrays in Bash haben ihre Tücken mit Leerzeichen. Immer "${array[@]}" mit Anführungszeichen — nie ${array[@]} ohne.