Array of arrays in bash Array of arrays in bash arrays arrays

Array of arrays in bash


Bash has no support for multidimensional arrays. Try

array=(a b c d)echo ${array[1]}echo ${array[1][3]}echo ${array[1]exit}

For tricks how to simulate them, see Advanced Bash Scripting Guide.


Field nest box in bash but it can not circumvent see the example.

#!/bin/bash# requires bash 4 or later; on macOS, /bin/bash is version 3.x,# so need to install bash 4 or 5 using e.g. https://brew.shdeclare -a pagespages[0]='domain.de;de;https'pages[1]='domain.fr;fr;http'for page in "${pages[@]}"do    # turn e.g. 'domain.de;de;https' into    # array ['domain.de', 'de', 'https']    IFS=";" read -r -a arr <<< "${page}"    site="${arr[0]}"    lang="${arr[1]}"    prot="${arr[2]}"    echo "site : ${site}"    echo "lang : ${lang}"    echo "prot : ${prot}"    echodone


Knowing that you can split string into "array". You could creat a list of lists. Like for example a list of databases in DB servers.

dbServersList=('db001:app001,app002,app003' 'db002:app004,app005' 'dbcentral:central')# Loop over DB serversfor someDbServer in ${dbServersList[@]}do    # delete previous array/list (this is crucial!)    unset dbNamesList    # split sub-list if available    if [[ $someDbServer == *":"* ]]    then        # split server name from sub-list        tmpServerArray=(${someDbServer//:/ })        someDbServer=${tmpServerArray[0]}        dbNamesList=${tmpServerArray[1]}        # make array from simple string        dbNamesList=(${dbNamesList//,/ })    fi    # Info    echo -e "\n----\n$someDbServer\n--"    # Loop over databases    for someDB in ${dbNamesList[@]}    do        echo $someDB    donedone

Output of above would be:

----db001--app001app002app003----db002--app004app005----dbcentral--central