diff --git a/rowbot b/rowbot index f9a8e92..77e1123 100755 --- a/rowbot +++ b/rowbot @@ -14,24 +14,26 @@ stty -echoctl # cerealizers put_assoc_array() { + local key put_name=RB_AA_${1^^} declare -n assoc_array=$1 - declare -n scalar=RB_AA_${1^^} - local key + declare -n scalar=$put_name for key in "${!assoc_array[@]}"; do scalar+=${#key},${#assoc_array[$key]}:$key${assoc_array[$key]} done - export "RB_AA_${1^^}" + log_trace "storing %s as %s=%s" "$1" "$put_name" "${scalar@Q}" + export "${put_name?}" } get_assoc_array() { - if [[ ! -v $1 ]]; then + if [[ $1 && ! -v $1 ]]; then declare -gA "$1" fi + local key_len val_len key debug_str get_name=RB_AA_${1^^} declare -n assoc_array=$1 - declare -n scalar=RB_AA_${1^^} + declare -n scalar=$get_name while [[ $scalar ]]; do key_len=${scalar%%,*} val_len=${scalar#*,} @@ -40,27 +42,33 @@ get_assoc_array() { scalar=${scalar:key_len + val_len} done - unset "RB_AA_${1^^}" + for key in "${!assoc_array[@]}"; do + debug_str+="[$key]=${assoc_array[$key]@Q} " + done + + log_trace "retreiving %s as %s=(%s)" "$get_name" "$1" "$debug_str" + unset "$get_name" } put_array() { + local val put_name=RB_A_${1^^} # The variable named array is a nameref to an array # shellcheck disable=SC2178 declare -n array=$1 - declare -n scalar=RB_A_${1^^} - local val + declare -n scalar=$put_name for val in "${array[@]}"; do scalar+=${#val}:$val done - export "RB_A_${1^^}" + log_trace "storing %s as %s=%s" "$1" "$put_name" "${scalar@Q}" + export "${put_name?}" } get_array() { + local len val get_name=RB_A_${1^^} declare -n array=$1 - declare -n scalar=RB_A_${1^^} - local len val + declare -n scalar=$get_name while [[ $scalar ]]; do len=${scalar%%:*} scalar=${scalar#"$len":} @@ -68,7 +76,8 @@ get_array() { array+=( "$val" ) done - unset "RB_A_${1^^}" + log_trace "retreiving %s as %s=(%s)" "$get_name" "$1" "${array[*]@Q}" + unset "$get_name" } b64_encode() { @@ -343,8 +352,12 @@ state_resolve() { declare -n ns_config=__rowbot_state_store_"$ns" state_manage "$ns" + # This is a false positive. + # shellcheck disable=SC2102 if [[ -v config[$1] ]]; then ns_config[$1]=${config[$1]} + elif [[ -v config[$ns-$1] ]]; then + ns_config[$1]=${config[$ns-$1]} elif [[ -v DEFAULT ]]; then ns_config[$1]=$DEFAULT else