MIAOU-BASH is a collection of settings and helpers for leveraging BASH. Developer-friendly, it may be used as solo package with or without the miaou project.
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.
 
 

59 lines
1.3 KiB

#!/usr/bin/env miaou-bash
PREFIX_NESTED="__nested__"
INSPECT_SIMPLE='-> '
INSPECT_NESTED='=> '
INSPECT_END='~~~~'
function array_new {
ref_name="$1"
shift
[[ ${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 mine0
array_new mine1 -- 'Albert Dupontel' 20
array_new mine2 -- 'Bob Sinclar' 24
array_new mine3 -- 'Conrad Ademayor' 68 true
array_new nested -- mine1 mine2 mine3
array_inspect nested
# change values
mine1[1]=$((mine1[1] - 2))
mine2[2]=false
mine3+=('UK')
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