You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.2 KiB
56 lines
1.2 KiB
#!/usr/bin/env miaou-bash
|
|
|
|
PREFIX_NESTED="__nested__"
|
|
INSPECT_SIMPLE='-> '
|
|
INSPECT_NESTED='=> '
|
|
INSPECT_END='~~~~'
|
|
|
|
function array_new {
|
|
ref_name="$1"
|
|
shift
|
|
[[ -v nested_count ]] && ((nested_count++)) || nested_count=1
|
|
nested_name="${PREFIX_NESTED}$nested_count"
|
|
declare -ga "$nested_name"
|
|
declare -gn "$ref_name"="$nested_name"
|
|
local -n internal="$nested_name"
|
|
internal+=("$@")
|
|
}
|
|
|
|
function array_inspect {
|
|
local ref prefix i
|
|
declare -n ref="$1"
|
|
prefix="${2:-}"
|
|
echo "${prefix}array '$1' contains ${#ref[@]} elements"
|
|
for i in "${ref[@]}"; do
|
|
if [[ -R $i ]]; then
|
|
array_inspect "$i" "${prefix}${INSPECT_NESTED}"
|
|
else
|
|
echo "${prefix}${INSPECT_SIMPLE}${i}"
|
|
fi
|
|
done
|
|
echo "${prefix}${INSPECT_END}"
|
|
}
|
|
|
|
# initialization
|
|
array_new mine1 'Albert Dupontel' 20
|
|
array_new mine2 'Bob Sinclar' 24
|
|
array_new mine3 'Conrad Ademayor' 31 true
|
|
array_new nested mine1 mine2 mine3
|
|
array_inspect nested
|
|
|
|
# change values
|
|
mine1+=(false)
|
|
mine3[1]=$((mine3[1] + 8))
|
|
mine3[2]=false
|
|
array_inspect nested
|
|
|
|
# nested twice
|
|
declare -n other="${nested[1]:?}" # ':?' fix shellcheck issue
|
|
array_inspect other
|
|
array_new mine4 'Darryl' 30
|
|
other+=(mine4)
|
|
array_inspect nested
|
|
|
|
# CAN'T PREVENT LOOP!
|
|
# other+=(nested)
|
|
# array_inspect nested
|