diff options
Diffstat (limited to 'bos-namespaces.sh')
-rw-r--r-- | bos-namespaces.sh | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/bos-namespaces.sh b/bos-namespaces.sh index 9fbbb08..fd371c3 100644 --- a/bos-namespaces.sh +++ b/bos-namespaces.sh @@ -1,22 +1,38 @@ #!bash ## namespace handling +function bos-namespaces/encode-into() { + local string="$1" + local -n result="$2" + local idx char tmp + + result='' + for (( idx=0 ; idx < "${#string}" ; ++idx )); do + char="${string:$idx:1}" + case "$char" in + [0-9A-Za-z]) tmp="$char";; + *) printf -v tmp _%02x "'$char" + esac + result+="$tmp" + done +} + function bos-namespaces/store-scalar-for-into() { - local name="bos_namespaces__${2//[^[:word:]/__}__${1//[^[:word:]]/__}" + local name; bos-namespaces/encode-into "bos_${2}_${1}" name local -n result="$3" declare -g "$name" result="$name" } function bos-namespaces/store-array-for-into() { - local name="bos_namespaces__${2//[^[:word:]/__}__${1//[^[:word:]]/__}" + local name; bos-namespaces/encode-into "bos_${2}_${1}" name local -n result="$3" declare -ga "$name" result="$name" } function bos-namespaces/store-dict-for-into() { - local name="bos_namespaces__${2//[^[:word:]/__}__${1//[^[:word:]]/__}" + local name; bos-namespaces/encode-into "bos_${2}_${1}" name local -n result="$3" declare -gA "$name" result="$name" |