projects
/
project
/
libubox.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sh/jshn.sh: replace "tr" calls with inline substitution, signalize success with retur...
[project/libubox.git]
/
sh
/
jshn.sh
diff --git
a/sh/jshn.sh
b/sh/jshn.sh
index
8ecefcf
..
a15cb00
100644
(file)
--- a/
sh/jshn.sh
+++ b/
sh/jshn.sh
@@
-24,7
+24,7
@@
json_add_generic() {
var=$(( ${aseq:-0} + 1 ))
export -- "SEQ_$cur=$var"
else
var=$(( ${aseq:-0} + 1 ))
export -- "SEQ_$cur=$var"
else
- local name="$
(echo -n "$var" | tr -C '[a-zA-Z_]' _)
"
+ local name="$
{var//[^a-zA-Z0-9_]/_}
"
[[ "$name" == "$var" ]] || export -- "NAME_${cur}_${name}=$var"
var="$name"
fi
[[ "$name" == "$var" ]] || export -- "NAME_${cur}_${name}=$var"
var="$name"
fi
@@
-94,14
+94,21
@@
json_dump() {
json_get_type() {
local dest="$1"
json_get_type() {
local dest="$1"
- local var="$2"
- eval "
export -- \"$dest=\${TYPE_${JSON_CUR}_
$var}\""
+ local var="
TYPE_${JSON_CUR}_
$2"
+ eval "
[ -n \"\${$var+x}\" ] && export -- \"$dest=\${
$var}\""
}
json_get_var() {
local dest="$1"
}
json_get_var() {
local dest="$1"
- local var="$2"
- eval "export -- \"$dest=\${${JSON_CUR}_$var}\""
+ local var="${JSON_CUR}_${2//[^a-zA-Z0-9_]/_}"
+ eval "[ -n \"\${$var+x}\" ] && export -- \"$dest=\${$var}\""
+}
+
+json_get_vars() {
+ while [ "$#" -gt 0 ]; do
+ local _var="$1"; shift
+ json_get_var "$_var" "$_var"
+ done
}
json_select() {
}
json_select() {
@@
-110,11
+117,11
@@
json_select() {
[ -z "$1" ] && {
JSON_CUR="JSON_VAR"
[ -z "$1" ] && {
JSON_CUR="JSON_VAR"
- return
+ return
0
}
[[ "$1" == ".." ]] && {
eval "JSON_CUR=\"\${UP_$JSON_CUR}\""
}
[[ "$1" == ".." ]] && {
eval "JSON_CUR=\"\${UP_$JSON_CUR}\""
- return
;
+ return
0
}
json_get_type type "$target"
case "$type" in
}
json_get_type type "$target"
case "$type" in
@@
-123,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
}