#!/bin/bash
#
###########################################################
# Copyright (c) 2022 by Manfred Rosenboom                 #
#                                                         #
# Dieses Werk ist lizenziert unter einer                  #
# Creative Commons Namensnennung 4.0 International Lizenz #
# CC-BY 4.0: https://creativecommons.org/licenses/by/4.0/ #
###########################################################
#
echo "Beispiele: Bash Arrays"
echo ""
echo "Bash Version : ${BASH_VERSION}"
echo "LANG         : ${LANG}"
echo -n "Kernel       : "
uname -s -r -m
echo ""
echo ""
#
###############################################################################
#
echo "Anlegen eines leeren Arrays"
echo "declare -a array"
echo "---"
declare -a array
echo ""
#
echo "Anlegen eines vorbelegten Arrays"
echo "declare -a arrayPre=(wert1 wert2 wert3 wert4)"
echo "---"
declare -a arrayPre=(wert1 wert2 wert3 wert4)
echo ""
#
###############################################################################
#
echo "Werte an ein Array anhängen"
echo "array+=(\"wert1\")"
echo "array+=(\"wert2\")"
echo "array+=(\"wert3\")"
echo "array+=(\"wert4\")"
echo "---"
array+=("wert1")
array+=("wert2")
array+=("wert3")
array+=("wert4")
echo ""
#
###############################################################################
#
echo "Zugriff auf ein Element mit dem Index (das 1. Element hat den Index 0)"
echo "echo \"\${array[0]}\""
echo "echo \"\${array[1]}\""
echo "---"
echo "${array[0]}"
echo "${array[1]}"
echo ""
#
###############################################################################
#
echo "Wert mit Index überschreiben"
echo "array[1]=\"wert2_neu\""
echo "---"
array[1]="wert2_neu"
echo "neuer Wert vom Element mit dem Index 1: ${array[1]}"
echo ""
#
echo "neuen Wert mit Index hinzufügen"
echo "array[5]=\"wert5\""
echo "---"
array[5]="wert5"
echo "Wert vom neuen Element mit dem Index 5: ${array[5]}"
echo ""
#
echo "was ist der Wert vom Element mit dem nicht belegtem Index 4 ?"
if [ "${array[4]}" = "" ]
then
    echo "\${array[4]} wird zu einem Leerstring expandiert"
else
    echo "Wert vom nicht belegtem Element mit dem Index 4: ${array[4]}"
fi
echo ""
#
###############################################################################
#
echo "Länge eines Arrays: \${#array[@]}"
echo "---"
echo "Länge des Arrays array    : ${#array[@]}"
echo "Länge des Arrays arrayPre : ${#arrayPre[@]}"
echo ""
#
###############################################################################
#
echo "Array kopieren"
echo "array2=(\"\${array[@]}\")"
echo "---"
array2=("${array[@]}")
echo ""
#
###############################################################################
#
echo "Array konkatenieren"
echo "array3=(\"\${array[@]}\" \"\${array2[@]}\")"
echo "---"
array3=("${array[@]}" "${array2[@]}")
echo ""
#
###############################################################################
#
echo "Element 1 bis 3 eines Array ausgeben"
echo "1: ab diesem Index, 4: alle Elemente vor diesem Index"
echo "echo \"\${array[@]:1:4}\""
echo "---"
echo "${array[@]:1:4}"
echo ""
#
###############################################################################
#
echo "Ausgabe des gesamten Arrays"
echo "echo \"\${array[@]}\""
echo "---"
echo "${array[@]}"
echo ""
#
###############################################################################
#
echo "Werte bei der Ausgabe ersetzen"
echo "\${array[@]/wert/value}: ersezt den String \"wert\" durch \"value\""
echo "---"
echo "${array[@]/wert/value}"
echo ""
#
###############################################################################
#
echo "Iteration über ein Array"
echo "for wert in \"\${array[@]}\""
echo "do"
echo "    echo \"Wert : \${wert}\""
echo "done"
echo "---"
for wert in "${array[@]}"
do
    echo "Wert : ${wert}"
done
echo ""
#
###############################################################################
#
echo "Prüfen, ob ein Wert im Array enthalten ist"
echo "if [[ \" \${array[@]} \" =~ \" wert1 \" ]]"
echo "then"
echo "    echo \"der Wert wert1 ist im Array array enthalten\""
echo "fi"
echo "---"
if [[ " ${array[@]} " =~ " wert1 " ]]
then
    echo "der Wert wert1 ist im Array array enthalten"
fi
echo ""
#
###############################################################################
#
echo "Prüfen, ob ein Wert nicht im Array enthalten ist"
echo "if [[ ! \" \${array[@]} \" =~ \" wertNONE \" ]]"
echo "then"
echo "    echo \"der Wert wertNone ist im Array array nicht enthalten\""
echo "fi"
echo "---"
if [[ ! " ${array[@]} " =~ " wertNONE " ]]
then
    echo "der Wert wertNone ist im Array array NICHT enthalten"
fi
echo ""
#
###############################################################################
#
echo "Löschen eines Elementes aus einem Array"
echo "\${array[5]} : ${array[5]}"
echo "unset array[5]"
echo "---"
unset array[5]
echo "\${array[5]} : ${array[5]}"
echo ""
#
###############################################################################
#
echo "Löschen eines Arrays"
echo "unset array"
echo "unset arrayPre"
unset array
unset arrayPre
echo ""
#
###############################################################################
#
echo "Zeilenweises Einlesen einer Datei in ein Array"
rm -f tmp.txt
touch tmp.txt
echo "Zeile 1" >> ./tmp.txt
echo "Zeile 2" >> ./tmp.txt
echo "Zeile 3" >> ./tmp.txt
echo "Zeile 4" >> ./tmp.txt
echo "Zeile 5" >> ./tmp.txt
echo "Inhalt der einzulesenden Datei"
cat ./tmp.txt
echo ""
#
echo "# BashFAQ/005: 2.1. Loading lines from a file or stream"
echo "# https://mywiki.wooledge.org/BashFAQ/005"
echo "mapfile -t array < ./tmp.txt"
echo "echo \"Anzahl gelesener Zeilen: \\\${#array[@]}: \${#array[@]}\""
echo "for line in \"\${array[@]}\""
echo "do"
echo "    echo \">>>>> \${line}\""
echo "done"
echo "---"
#
# BashFAQ/005: 2.1. Loading lines from a file or stream
# https://mywiki.wooledge.org/BashFAQ/005
mapfile -t array < ./tmp.txt
echo "Anzahl gelesener Zeilen: \${#array[@]}: ${#array[@]}"
for line in "${array[@]}"
do
    echo ">>>>> ${line}"
done
#
rm -f tmp.txt
echo ""
#
###############################################################################
#
exit 0