sh/jshn.sh: replace "tr" calls with inline substitution, signalize success with return values

This commit is contained in:
Jo-Philipp Wich 2012-05-29 02:10:20 +02:00 committed by Felix Fietkau
parent 652162cf86
commit 66308641bf

View file

@ -24,7 +24,7 @@ json_add_generic() {
var=$(( ${aseq:-0} + 1 )) var=$(( ${aseq:-0} + 1 ))
export -- "SEQ_$cur=$var" export -- "SEQ_$cur=$var"
else else
local name="$(echo -n "$var" | tr -C '[a-zA-Z0-9_]' _)" local name="${var//[^a-zA-Z0-9_]/_}"
[[ "$name" == "$var" ]] || export -- "NAME_${cur}_${name}=$var" [[ "$name" == "$var" ]] || export -- "NAME_${cur}_${name}=$var"
var="$name" var="$name"
fi fi
@ -94,14 +94,14 @@ json_dump() {
json_get_type() { json_get_type() {
local dest="$1" local dest="$1"
local var="$2" local var="TYPE_${JSON_CUR}_$2"
eval "export -- \"$dest=\${TYPE_${JSON_CUR}_$var}\"" eval "[ -n \"\${$var+x}\" ] && export -- \"$dest=\${$var}\""
} }
json_get_var() { json_get_var() {
local dest="$1" local dest="$1"
local var="$(echo -n "$2" | tr -C '[a-zA-Z0-9_]' _)" local var="${JSON_CUR}_${2//[^a-zA-Z0-9_]/_}"
eval "export -- \"$dest=\${${JSON_CUR}_$var}\"" eval "[ -n \"\${$var+x}\" ] && export -- \"$dest=\${$var}\""
} }
json_get_vars() { json_get_vars() {
@ -117,11 +117,11 @@ json_select() {
[ -z "$1" ] && { [ -z "$1" ] && {
JSON_CUR="JSON_VAR" JSON_CUR="JSON_VAR"
return return 0
} }
[[ "$1" == ".." ]] && { [[ "$1" == ".." ]] && {
eval "JSON_CUR=\"\${UP_$JSON_CUR}\"" eval "JSON_CUR=\"\${UP_$JSON_CUR}\""
return; return 0
} }
json_get_type type "$target" json_get_type type "$target"
case "$type" in case "$type" in
@ -130,6 +130,7 @@ json_select() {
;; ;;
*) *)
echo "WARNING: Variable '$target' does not exist or is not an array/object" echo "WARNING: Variable '$target' does not exist or is not an array/object"
return 1
;; ;;
esac esac
} }