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