#!/usr/bin/env miaou-bash function array_new { ref_name="$1" shift [[ -v nested_count ]] && ((nested_count++)) || nested_count=1 nested_name="nested_$nested_count" declare -ga "$nested_name" declare -gn "$ref_name"="$nested_name" local -n internal="$nested_name" internal+=("$@") } function array_inspect { local -n ref="$1" prefix="${2:-}" echo "${prefix}array '$1' contains ${#ref[@]} elements" local i for i in "${ref[@]}"; do echo "${prefix}-> $i"; done echo "${prefix}----" } function nested_new { ref_name="$1" shift [[ -v nested_count ]] && ((nested_count++)) || nested_count=1 nested_name="nested_$nested_count" declare -gA "$nested_name" declare -gn "$ref_name"="$nested_name" local -n internal="$nested_name" internal['TYPE']='NESTED_ARRAY' # internal['VALUES']=("$@") } function nested_inspect { local -n internal=$1 [[ "${internal['TYPE']}" != 'NESTED_ARRAY' ]] && >&2 echo "expected nested array: $1" && return 1 count=${#internal[@]} count=$((count - 1)) echo "nested '$1' contains $count arrays" local i for ((i = 0; i < count; i++)); do array_inspect "${internal[$i]}" " => " done echo ---- # ${!internal[@]}; do echo "${key}, ${internal[${key}]}"; done } array_new mine1 'Albert' 20 array_new mine2 'Bob' 24 array_new mine3 'Cobra' 31 true # array_inspect mine1 # array_inspect mine2 # array_inspect mine3 " => " declare -A nested nested['TYPE']='NESTED_ARRAY' nested[0]=mine1 nested[1]=mine2 nested[2]=mine3 nested_inspect nested nested_new nested1 mine1 mine2 mine3 # nested_inspect nested1