changeset 759:6f3f1bb9502c

farray.sh: Use a more strict quoting. Note: The previous quoting style was not wrong.
author Franz Glasner <fzglas.hg@dom66.de>
date Sun, 20 Oct 2024 16:09:43 +0200
parents 7ead30e3b2f9
children ab6298596d73
files share/local-bsdtools/farray.sh
diffstat 1 files changed, 143 insertions(+), 143 deletions(-) [+]
line wrap: on
line diff
--- a/share/local-bsdtools/farray.sh	Sun Oct 20 14:43:50 2024 +0200
+++ b/share/local-bsdtools/farray.sh	Sun Oct 20 16:09:43 2024 +0200
@@ -273,7 +273,7 @@
 
     if [ -z "${__farr_mi_index}" ]; then
         if [ -n "${__farr_mi_length}" ]; then
-            eval "${__farr_mi_varname}"="\$((__farr_mi_length + 1))"
+            setvar "${__farr_mi_varname}" $((__farr_mi_length + 1))
         else
             _farr_fatal "length not given: cannot autocompute index"
         fi
@@ -281,12 +281,12 @@
         _farr_is_decimal_number "${__farr_mi_index}" || _farr_fatal "given index is not a valid decimal number"
         if [ "${__farr_mi_index}" -le 0 ]; then
             if [ -n "${__farr_mi_length}" ]; then
-                eval "${__farr_mi_varname}"="\$((__farr_mi_length + __farr_mi_index))"
+                setvar "${__farr_mi_varname}" $((__farr_mi_length + __farr_mi_index))
             else
                 _farr_fatal "cannot compute effective index because no length is given"
             fi
         else
-            eval "${__farr_mi_varname}"=\$\{__farr_mi_index\}
+            setvar "${__farr_mi_varname}" "${__farr_mi_index}"
         fi
     fi
 }
@@ -409,10 +409,10 @@
 
 
 #:
-#: Quote the given input string for eval and produce a strictly posixly correct
-#: encoding.
-#:
-#: It does not use FreeBSD's ``$'...'`` shell feature.
+#: Quote the given input string for `eval` and produce a strictly posixly
+#: correct encoding.
+#:
+#: It does not use FreeBSD's ``$'...'`` feature in its :command:`/bin/sh`.
 #:
 #: If the argument contains a ``'`` character then a proper "Single-Quotes"
 #: combination is used.
@@ -536,18 +536,18 @@
 
     __farr_token="$(/usr/bin/hexdump -v -e '/1 "%02x"' -n 16 '/dev/urandom')"
 
-    __farr_gvrname=${_farr_array_prefix}${__farr_token}
+    __farr_gvrname="${_farr_array_prefix}${__farr_token}"
 
     # Check whether the variable already exists
-    eval __farr_len=\$\{${__farr_gvrname}__+SET\}
+    eval __farr_len=\"\$\{"${__farr_gvrname}"__+SET\}\"
     [ -n "${__farr_len}" ] && _farr_fatal "farray \`${__farr_name}' already exists: existing token \`${__farr_token}'"
 
     # Really create the storage by initializing its length ...
-    eval ${__farr_gvrname}__=0
+    setvar "${__farr_gvrname}__" 0
     # ... and its reference count
-    eval ${__farr_gvrname}_C=1
+    setvar "${__farr_gvrname}_C" 1
     # And associate the token with the array name
-    eval "${__farr_name}=\"\${_farr_array_token_prefix}\${__farr_token}\""
+    setvar "${__farr_name}" "${_farr_array_token_prefix}${__farr_token}"
 
     #
     # When there are values to populate the array with.
@@ -613,11 +613,11 @@
     esac
     __farr_gvrname="${_farr_array_prefix}${__farr_token}"
 
-    eval __farr_len=\$\{${__farr_gvrname}__:+SET\}
+    eval __farr_len=\"\$\{"${__farr_gvrname}"__:+SET\}\"
     [ -z "${__farr_len}" ] && _farr_fatal "farray \`${__farr_name:-"${__farr_gm_name_or_value}"}' not created properly: no storage for token \`${__farr_token}'"
-    eval __farr_tmp_refcount=\$\{${__farr_gvrname}_C:+SET\}
+    eval __farr_tmp_refcount=\"\$\{"${__farr_gvrname}"_C:+SET\}\"
     [ -z "${__farr_tmp_refcount}" ] && _farr_fatal "farray \`${__farr_name:-"${__farr_gm_name_or_value}"}' not created properly: no refcnt for token \`${__farr_token}'"
-    eval __farr_len=\"\$\{${__farr_gvrname}__\}\"
+    eval __farr_len=\"\$\{"${__farr_gvrname}"__\}\"
     return 0
 }
 
@@ -683,17 +683,17 @@
     esac
     __farr_gvrname="${_farr_array_prefix}${__farr_token}"
 
-    eval __farr_len=\$\{${__farr_gvrname}__:+SET\}
+    eval __farr_len=\"\$\{"${__farr_gvrname}"__:+SET\}\"
     if [ -z "${__farr_len}" ] ; then
         _farr_err "farray \`${__farr_name:-"${__farr_gm_name_or_value}"}' not created properly: no storage for token \`${__farr_token}'"
         return 1
     fi
-    eval __farr_tmp_refcount=\$\{${__farr_gvrname}_C:+SET\}
+    eval __farr_tmp_refcount=\"\$\{"${__farr_gvrname}"_C:+SET\}\"
     if [ -z "${__farr_tmp_refcount}" ] ; then
         _farr_err "farray \`${__farr_name:-"${__farr_gm_name_or_value}"}' not created properly: no refcnt for token \`${__farr_token}'"
         return 1
     fi
-    eval __farr_len=\"\$\{${__farr_gvrname}__\}\"
+    eval __farr_len=\"\$\{"${__farr_gvrname}"__\}\"
     return 0
 }
 
@@ -764,11 +764,11 @@
     esac
     __farr_gvrname="${_farr_array_prefix}${__farr_token}"
 
-    eval __farr_len=\$\{${__farr_gvrname}__:+SET\}
+    eval __farr_len=\"\$\{"${__farr_gvrname}"__:+SET\}\"
     [ -z "${__farr_len}" ] && return 1
-    eval __farr_tmp_refcount=\$\{${__farr_gvrname}_C:+SET\}
+    eval __farr_tmp_refcount=\"\$\{"${__farr_gvrname}"_C:+SET\}\"
     [ -z "${__farr_tmp_refcount}" ] && return 1
-    eval __farr_len=\"\$\{${__farr_gvrname}__\}\"
+    eval __farr_len=\"\$\{"${__farr_gvrname}"__\}\"
     return 0
 }
 
@@ -789,7 +789,7 @@
     [ -z "${__farr_varname}" ] && _farr_fatal "missing variable name"
     shift
     _farr_array_get_meta "$@"
-    eval "${__farr_varname}"=${__farr_len}
+    setvar "${__farr_varname}" "${__farr_len}"
 }
 
 
@@ -809,8 +809,8 @@
 farray_print_length() {
     local __farr_vn
 
-    ( farray_length __farr_vn "$@" && printf "%s" "${__farr_vn}"; ) \
-    || printf "%s" "-1"
+    ( farray_length __farr_vn "$@" && printf '%s' "${__farr_vn}"; ) \
+    || printf '%s' "-1"
 }
 
 
@@ -838,15 +838,15 @@
         # backslashes and single quotes.
         #
         _farr_acquire_object "${__farr_newval}"
-        eval ${__farr_gvrname}_${__farr_len_1}=\"\$\{__farr_newval\}\"
+        setvar "${__farr_gvrname}_${__farr_len_1}" "${__farr_newval}"
         # the implementation below line does not escape properly
         #   eval ${__farr_gvrname}_${__farr_len_1}="\"${__farr_value}\""
 
         # Set new array length
         #  ... persistently in the array data storage
-        eval ${__farr_gvrname}__=${__farr_len_1}
+        setvar "${__farr_gvrname}__" "${__farr_len_1}"
         #  ... and locally
-        __farr_len=${__farr_len_1}
+        __farr_len="${__farr_len_1}"
     done
 }
 
@@ -873,24 +873,24 @@
     _farr_array_get_meta "$@"
     _farr_make_index __farr_index "${2-}" "${__farr_len}"
     # first check
-    [ ${__farr_index} -lt 1 ] && _farr_fatal "index must be >= 1"
+    [ "${__farr_index}" -lt 1 ] && _farr_fatal "index must be >= 1"
     __farr_value="${3-}"
 
     # For proper quoting: see farray_append
-    if [ \( ${__farr_index} -ge 1 \) -a \( ${__farr_index} -le ${__farr_len} \) ]; then
+    if [ \( "${__farr_index}" -ge 1 \) -a \( "${__farr_index}" -le "${__farr_len}" \) ]; then
         _farr_acquire_object "${__farr_value}"
         # replace a value at an existing index
-        eval __farr_old_value=\"\$\{${__farr_gvrname}_${__farr_index}\}\"
+        eval __farr_old_value=\"\$\{"${__farr_gvrname}"_"${__farr_index}"\}\"
         _farr_release_object "${__farr_old_value}"
-        eval ${__farr_gvrname}_${__farr_index}=\"\$\{__farr_value\}\"
+        setvar "${__farr_gvrname}_${__farr_index}" "${__farr_value}"
     else
         __farr_len_1=$((__farr_len + 1))
-        if [ ${__farr_index} -eq ${__farr_len_1} ]; then
+        if [ "${__farr_index}" -eq "${__farr_len_1}" ]; then
             _farr_acquire_object "${__farr_value}"
             # append value
-            eval ${__farr_gvrname}_${__farr_len_1}=\"\$\{__farr_value\}\"
+            setvar "${__farr_gvrname}_${__farr_len_1}" "${__farr_value}"
             # and set new length
-            eval ${__farr_gvrname}__=${__farr_len_1}
+            setvar "${__farr_gvrname}__" "${__farr_len_1}"
         else
             _farr_fatal "array index out of bounds (cannot create holes)"
         fi
@@ -918,13 +918,13 @@
     _farr_array_get_meta "$@"
     _farr_make_index __farr_index "${2-}" "${__farr_len}"
     # check index range
-    if [ \( "${__farr_index}" -lt 1 \) -o \( "${__farr_index}" -gt ${__farr_len} \) ]; then
+    if [ \( "${__farr_index}" -lt 1 \) -o \( "${__farr_index}" -gt "${__farr_len}" \) ]; then
 	_farr_fatal "array index out of bounds"
     fi
 
-    eval __farr_get_value=\"\$\{${__farr_gvrname}_${__farr_index}\}\"
+    eval __farr_get_value=\"\$\{"${__farr_gvrname}"_"${__farr_index}"\}\"
     _farr_acquire_object "${__farr_get_value}"
-    eval "${__farr_varname}"=\"\$\{__farr_get_value\}\"
+    setvar "${__farr_varname}" "${__farr_get_value}"
 }
 
 
@@ -957,13 +957,13 @@
     _farr_array_get_meta "$@"
     _farr_make_index __farr_index "${2-}" "${__farr_len}"
     # check index range
-    if [ \( "${__farr_index}" -lt 1 \) -o \( "${__farr_index}" -gt ${__farr_len} \) ]; then
+    if [ \( "${__farr_index}" -lt 1 \) -o \( "${__farr_index}" -gt "${__farr_len}" \) ]; then
 	return 1
     fi
 
-    eval __farr_get_value=\"\$\{${__farr_gvrname}_${__farr_index}\}\"
+    eval __farr_get_value=\"\$\{"${__farr_gvrname}"_"${__farr_index}"\}\"
     _farr_acquire_object "${__farr_get_value}"
-    eval "${__farr_varname}"=\"\$\{__farr_get_value\}\"
+    setvar "${__farr_varname}" "${__farr_get_value}"
     return 0
 }
 
@@ -984,25 +984,25 @@
     _farr_array_get_meta "$@"
     _farr_make_index __farr_index "${2-}" "${__farr_len}"
     # check index range
-    if [ \( "${__farr_index}" -lt 1 \) -o \( "${__farr_index}" -gt ${__farr_len} \) ]; then
+    if [ \( "${__farr_index}" -lt 1 \) -o \( "${__farr_index}" -gt "${__farr_len}" \) ]; then
 	_farr_fatal "array index out of bounds"
     fi
 
     # Release the item at index
-    eval __farr_del_value=\"\$\{${__farr_gvrname}_${__farr_index}\}\"
+    eval __farr_del_value=\"\$\{"${__farr_gvrname}"_"${__farr_index}"\}\"
     _farr_release_object "${__farr_del_value}"
 
     # Move all other items down by one
-    __farr_idx=${__farr_index}
-    while [ ${__farr_idx} -lt ${__farr_len} ]; do
+    __farr_idx="${__farr_index}"
+    while [ "${__farr_idx}" -lt "${__farr_len}" ]; do
         # copy the following value to the current index
-        eval ${__farr_gvrname}_${__farr_idx}=\"\$\{${__farr_gvrname}_$((__farr_idx + 1))\}\"
+        eval "${__farr_gvrname}"_"${__farr_idx}"=\"\$\{"${__farr_gvrname}"_$((__farr_idx + 1))\}\"
         __farr_idx=$((__farr_idx + 1))
     done
     # Drop the last item
-    eval unset ${__farr_gvrname}_${__farr_idx}
+    eval unset "${__farr_gvrname}"_"${__farr_idx}"
     # Set the new length
-    eval ${__farr_gvrname}__=$((__farr_len - 1))
+    setvar "${__farr_gvrname}__" $((__farr_len - 1))
 }
 
 
@@ -1114,73 +1114,73 @@
         __farr_length="$((__farr_l_len - __farr_index + 1))"
     else
         _farr_is_decimal_number "${__farr_length}" || _farr_fatal "given length is not a valid number"
-        [ \( "${__farr_length}" -lt 0 \) -o \( "${__farr_length}" -gt "$((__farr_l_len - __farr_index + 1))" \) ] && _farr_fatal "length out of valid range"
+        [ \( "${__farr_length}" -lt 0 \) -o \( "${__farr_length}" -gt $((__farr_l_len - __farr_index + 1)) \) ] && _farr_fatal "length out of valid range"
     fi
-    if [ ${__farr_length} -eq ${__farr_r_len} ]; then
+    if [ "${__farr_length}" -eq "${__farr_r_len}" ]; then
         # Just replace
         __farr_off=0
-        while [ ${__farr_off} -lt ${__farr_length} ]; do
-            eval __farr_v=\"\$\{${__farr_l_gvrname}_$((__farr_index + __farr_off))\}\"
+        while [ "${__farr_off}" -lt "${__farr_length}" ]; do
+            eval __farr_v=\"\$\{"${__farr_l_gvrname}"_$((__farr_index + __farr_off))\}\"
             if [ -n "${__farr_del_array}" ]; then
                 farray_append "${__farr_del_array}" "${__farr_v}"
             fi
             _farr_release_object "${__farr_v}"
-            eval __farr_v=\"\$\{${__farr_r_gvrname}_$((__farr_off + 1))\}\"
+            eval __farr_v=\"\$\{"${__farr_r_gvrname}"_$((__farr_off + 1))\}\"
             _farr_acquire_object "${__farr_v}"
-            eval ${__farr_l_gvrname}_$((__farr_index + __farr_off))=\"\$\{__farr_v\}\"
+            setvar "${__farr_l_gvrname}"_$((__farr_index + __farr_off)) "${__farr_v}"
             __farr_off=$((__farr_off + 1))
         done
-    elif [ ${__farr_length} -gt ${__farr_r_len} ]; then
+    elif [ "${__farr_length}" -gt "${__farr_r_len}" ]; then
         # More to delete than to copy: the resulting array shrinks
         __farr_delta=$((__farr_length - __farr_r_len))
         __farr_off=0
-        while [ ${__farr_off} -lt ${__farr_r_len} ]; do
-            eval __farr_v=\"\$\{${__farr_l_gvrname}_$((__farr_index + __farr_off))\}\"
+        while [ "${__farr_off}" -lt "${__farr_r_len}" ]; do
+            eval __farr_v=\"\$\{"${__farr_l_gvrname}"_$((__farr_index + __farr_off))\}\"
             if [ -n "${__farr_del_array}" ]; then
                 farray_append "${__farr_del_array}" "${__farr_v}"
             fi
             _farr_release_object "${__farr_v}"
-            eval __farr_v=\"\$\{${__farr_r_gvrname}_$((__farr_off + 1))\}\"
+            eval __farr_v=\"\$\{"${__farr_r_gvrname}"_$((__farr_off + 1))\}\"
             _farr_acquire_object "${__farr_v}"
-            eval ${__farr_l_gvrname}_$((__farr_index + __farr_off))=\"\$\{__farr_v\}\"
+            setvar "${__farr_l_gvrname}"_$((__farr_index + __farr_off)) "${__farr_v}"
             __farr_off=$((__farr_off + 1))
         done
         # Copy / unset the rest that is to delete
-        while [ ${__farr_off} -lt ${__farr_length} ]; do
-            eval __farr_v=\"\$\{${__farr_l_gvrname}_$((__farr_index + __farr_off))\}\"
+        while [ "${__farr_off}" -lt "${__farr_length}" ]; do
+            eval __farr_v=\"\$\{"${__farr_l_gvrname}"_$((__farr_index + __farr_off))\}\"
             if [ -n "${__farr_del_array}" ]; then
                 farray_append "${__farr_del_array}" "${__farr_v}"
             fi
             _farr_release_object "${__farr_v}"
-            eval unset ${__farr_l_gvrname}_$((__farr_index + __farr_off))
+            eval unset "${__farr_l_gvrname}"_$((__farr_index + __farr_off))
             __farr_off=$((__farr_off + 1))
         done
         # Move the rest -- here no refcount changes
         __farr_src_idx=$((__farr_index + __farr_length))
         __farr_dst_idx=$((__farr_index + __farr_r_len))
-        while [ ${__farr_src_idx} -le ${__farr_l_len} ]; do
-            eval __farr_v=\"\$\{${__farr_l_gvrname}_${__farr_src_idx}\}\"
-            eval ${__farr_l_gvrname}_${__farr_dst_idx}=\"\$\{__farr_v\}\"
-            eval unset ${__farr_l_gvrname}_${__farr_src_idx}
+        while [ "${__farr_src_idx}" -le "${__farr_l_len}" ]; do
+            eval __farr_v=\"\$\{"${__farr_l_gvrname}"_"${__farr_src_idx}"\}\"
+            setvar "${__farr_l_gvrname}"_"${__farr_dst_idx}" "${__farr_v}"
+            eval unset "${__farr_l_gvrname}"_"${__farr_src_idx}"
             __farr_src_idx=$((__farr_src_idx + 1))
             __farr_dst_idx=$((__farr_dst_idx + 1))
         done
         # Adjust the length
-        eval ${__farr_l_gvrname}__=$((__farr_l_len - __farr_delta))
+        setvar "${__farr_l_gvrname}__" $((__farr_l_len - __farr_delta))
     else
         # More to copy than to delete: the resulting array grows
         __farr_delta=$((__farr_r_len - __farr_length))
         __farr_off=0
-        while [ ${__farr_off} -lt ${__farr_length} ]; do
-            eval __farr_v=\"\$\{${__farr_l_gvrname}_$((__farr_index + __farr_off))\}\"
+        while [ "${__farr_off}" -lt "${__farr_length}" ]; do
+            eval __farr_v=\"\$\{"${__farr_l_gvrname}"_$((__farr_index + __farr_off))\}\"
 
             if [ -n "${__farr_del_array}" ]; then
                 farray_append "${__farr_del_array}" "${__farr_v}"
             fi
             _farr_release_object "${__farr_v}"
-            eval __farr_v=\"\$\{${__farr_r_gvrname}_$((__farr_off + 1))\}\"
+            eval __farr_v=\"\$\{"${__farr_r_gvrname}"_$((__farr_off + 1))\}\"
             _farr_acquire_object "${__farr_v}"
-            eval ${__farr_l_gvrname}_$((__farr_index + __farr_off))=\"\$\{__farr_v\}\"
+            setvar "${__farr_l_gvrname}"_$((__farr_index + __farr_off)) "${__farr_v}"
             __farr_off=$((__farr_off + 1))
         done
         #
@@ -1189,9 +1189,9 @@
         #
         __farr_src_idx=${__farr_l_len}
         __farr_dst_idx=$((__farr_src_idx + __farr_delta))
-        while [ ${__farr_src_idx} -ge $((__farr_index + __farr_length)) ]; do
-            eval __farr_v=\"\$\{${__farr_l_gvrname}_${__farr_src_idx}\}\"
-            eval ${__farr_l_gvrname}_${__farr_dst_idx}=\"\$\{__farr_v\}\"
+        while [ "${__farr_src_idx}" -ge $((__farr_index + __farr_length)) ]; do
+            eval __farr_v=\"\$\{"${__farr_l_gvrname}"_"${__farr_src_idx}"\}\"
+            setvar "${__farr_l_gvrname}"_"${__farr_dst_idx}" "${__farr_v}"
             __farr_src_idx=$((__farr_src_idx - 1))
             __farr_dst_idx=$((__farr_dst_idx - 1))
         done
@@ -1201,14 +1201,14 @@
         # NOTE: The offset variable __farr_off from above is NOT changed in
         #       between and valid here!
         #
-        while [ ${__farr_off} -lt ${__farr_r_len} ]; do
-            eval __farr_v=\"\$\{${__farr_r_gvrname}_$((__farr_off + 1))\}\"
+        while [ "${__farr_off}" -lt "${__farr_r_len}" ]; do
+            eval __farr_v=\"\$\{"${__farr_r_gvrname}"_$((__farr_off + 1))\}\"
             _farr_acquire_object "${__farr_v}"
-            eval ${__farr_l_gvrname}_$((__farr_index + __farr_off))=\"\$\{__farr_v\}\"
+            setvar "${__farr_l_gvrname}"_$((__farr_index + __farr_off)) "${__farr_v}"
             __farr_off=$((__farr_off + 1))
         done
         # Adjust the length
-        eval ${__farr_l_gvrname}__=$((__farr_l_len + __farr_delta))
+        setvar "${__farr_l_gvrname}"__ $((__farr_l_len + __farr_delta))
     fi
     return 0
 }
@@ -1250,35 +1250,35 @@
 
     __farr_idx_1=1
     if [ "${__farr_idx_1}" -le "${__farr_len_1}" ]; then
-        eval __farr_item_1=\"\$\{${__farr_gvrname_1}_${__farr_idx_1}\}\"
+        eval __farr_item_1=\"\$\{"${__farr_gvrname_1}"_"${__farr_idx_1}"\}\"
     fi
     __farr_idx_2=1
     if [ "${__farr_idx_2}" -le "${__farr_len_2}" ]; then
-        eval __farr_item_2=\"\$\{${__farr_gvrname_2}_${__farr_idx_2}\}\"
+        eval __farr_item_2=\"\$\{"${__farr_gvrname_2}"_"${__farr_idx_2}"\}\"
     fi
     while [ \( "${__farr_idx_1}" -le "${__farr_len_1}" \) -a \( "${__farr_idx_2}" -le "${__farr_len_2}" \) ]; do
         if [ \( "${__farr_item_1}" '<' "${__farr_item_2}" \) -o \( "${__farr_item_1}" '=' "${__farr_item_2}" \) ] ; then
             farray_append "${__farr_result}" "${__farr_item_1}"
             __farr_idx_1=$((__farr_idx_1 + 1))
             if [ "${__farr_idx_1}" -le "${__farr_len_1}" ]; then
-                eval __farr_item_1=\"\$\{${__farr_gvrname_1}_${__farr_idx_1}\}\"
+                eval __farr_item_1=\"\$\{"${__farr_gvrname_1}"_"${__farr_idx_1}"\}\"
             fi
         else
             farray_append "${__farr_result}" "${__farr_item_2}"
             __farr_idx_2=$((__farr_idx_2 + 1))
             if [ "${__farr_idx_2}" -le "${__farr_len_2}" ]; then
-                eval __farr_item_2=\"\$\{${__farr_gvrname_2}_${__farr_idx_2}\}\"
+                eval __farr_item_2=\"\$\{"${__farr_gvrname_2}"_"${__farr_idx_2}"\}\"
             fi
         fi
     done
     # Only one of the two while-loops below will be entered
     while [ "${__farr_idx_1}" -le "${__farr_len_1}" ]; do
-        eval __farr_item_1=\"\$\{${__farr_gvrname_1}_${__farr_idx_1}\}\"
+        eval __farr_item_1=\"\$\{"${__farr_gvrname_1}"_"${__farr_idx_1}"\}\"
         farray_append "${__farr_result}" "${__farr_item_1}"
         __farr_idx_1=$((__farr_idx_1 + 1))
     done
     while [ "${__farr_idx_2}" -le "${__farr_len_2}" ]; do
-        eval __farr_item_2=\"\$\{${__farr_gvrname_2}_${__farr_idx_2}\}\"
+        eval __farr_item_2=\"\$\{"${__farr_gvrname_2}"_"${__farr_idx_2}"\}\"
         farray_append "${__farr_result}" "${__farr_item_2}"
         __farr_idx_2=$((__farr_idx_2 + 1))
     done
@@ -1300,15 +1300,15 @@
     _farr_array_get_meta "$@"
 
     __farr_idx=1
-    while [ ${__farr_idx} -le ${__farr_len} ]; do
-        eval __farr_del_value=\"\$\{${__farr_gvrname}_${__farr_idx}\}\"
+    while [ "${__farr_idx}" -le "${__farr_len}" ]; do
+        eval __farr_del_value=\"\$\{"${__farr_gvrname}"_"${__farr_idx}"\}\"
         _farr_release_object "${__farr_del_value}"
-	eval unset ${__farr_gvrname}_${__farr_idx}
+	eval unset "${__farr_gvrname}"_"${__farr_idx}"
 	__farr_idx=$((__farr_idx + 1))
     done
 
     # Length is now zero
-    eval ${__farr_gvrname}__=0
+    setvar "${__farr_gvrname}"__ 0
 }
 
 
@@ -1339,9 +1339,9 @@
     # Note that the existence of the reference count proper is already
     # checked by `_farr_array_tryget_meta`.
     #
-    eval __farr_refcnt=\$\{${__farr_gvrname}_C\}
+    eval __farr_refcnt=\"\$\{"${__farr_gvrname}"_C\}\"
     __farr_refcnt=$((__farr_refcnt - 1))
-    eval ${__farr_gvrname}_C=\$\{__farr_refcnt\}
+    setvar "${__farr_gvrname}"_C "${__farr_refcnt}"
     if [ "${__farr_refcnt}" -ne 0 ] ; then
         # Clean out the array name from the token always
         [ -n "${__farr_name}" ] && eval "${__farr_name}=''"
@@ -1350,19 +1350,19 @@
 
     # Remove "storage" because the reference count is 0
     __farr_idx=1
-    while [ ${__farr_idx} -le ${__farr_len} ]; do
-        eval __farr_del_value=\"\$\{${__farr_gvrname}_${__farr_idx}\}\"
+    while [ "${__farr_idx}" -le "${__farr_len}" ]; do
+        eval __farr_del_value=\"\$\{"${__farr_gvrname}"_"${__farr_idx}"\}\"
         _farr_release_object "${__farr_del_value}"
-	eval unset ${__farr_gvrname}_${__farr_idx}
+	eval unset "${__farr_gvrname}"_"${__farr_idx}"
 	__farr_idx=$((__farr_idx + 1))
     done
 
     # Remove length itself ...
-    eval unset ${__farr_gvrname}__
+    eval unset "${__farr_gvrname}__"
     # ... and the reference count
-    eval unset ${__farr_gvrname}_C
+    eval unset "${__farr_gvrname}_C"
     # Clean out the array name from the token
-    [ -n "${__farr_name}" ] && eval "${__farr_name}=''"
+    [ -n "${__farr_name}" ] && setvar "${__farr_name}" ''
     return 0
 }
 
@@ -1414,8 +1414,8 @@
     [ $# -lt 1 ] && _farr_fatal "no search value given"
     for __farr_searched_value in "$@"; do
         __farr_idx=1
-        while [ ${__farr_idx} -le ${__farr_len} ]; do
-            eval __farr_existing_value=\"\$\{${__farr_gvrname}_${__farr_idx}\}\"
+        while [ "${__farr_idx}" -le "${__farr_len}" ]; do
+            eval __farr_existing_value=\"\$\{"${__farr_gvrname}"_"${__farr_idx}"\}\"
             [ "${__farr_existing_value}" = "${__farr_searched_value}" ] && return 0
 	    __farr_idx=$((__farr_idx + 1))
         done
@@ -1462,19 +1462,19 @@
     __farr_start="${3-}"
     [ -z "${__farr_start}" ] && __farr_start=1
     _farr_make_index __farr_start "${__farr_start}" "${__farr_len}"
-    [ ${__farr_start} -lt 1 ] && _farr_fatal "start index must be >= 1"
+    [ "${__farr_start}" -lt 1 ] && _farr_fatal "start index must be >= 1"
     __farr_end="${4-}"
     [ -z "${__farr_end}" ] && __farr_end="${__farr_len}"
     _farr_make_index __farr_end "${__farr_end}" "${__farr_len}"
-    [ ${__farr_end} -lt 1 ] && [ ${__farr_len} -gt 0 ] && _farr_fatal "end index must be >= 1"
-    [ ${__farr_end} -gt "${__farr_len}" ] && _farr_fatal "end index exceeds array length"
-
-    __farr_cur_find_idx=${__farr_start}
-    while [ ${__farr_cur_find_idx} -le ${__farr_end} ]; do
-        eval __farr_existing_value=\"\$\{${__farr_gvrname}_${__farr_cur_find_idx}\}\"
+    [ "${__farr_end}" -lt 1 ] && [ "${__farr_len}" -gt 0 ] && _farr_fatal "end index must be >= 1"
+    [ "${__farr_end}" -gt "${__farr_len}" ] && _farr_fatal "end index exceeds array length"
+
+    __farr_cur_find_idx="${__farr_start}"
+    while [ "${__farr_cur_find_idx}" -le "${__farr_end}" ]; do
+        eval __farr_existing_value=\"\$\{"${__farr_gvrname}"_"${__farr_cur_find_idx}"\}\"
         if [ "${__farr_existing_value}" = "${__farr_searched_value}" ]; then
             #printf "%d" ${__farr_cur_find_idx}
-            eval "${__farr_varname}"=${__farr_cur_find_idx}
+            setvar "${__farr_varname}" "${__farr_cur_find_idx}"
             return 0
         fi
 	__farr_cur_find_idx=$((__farr_cur_find_idx + 1))
@@ -1503,12 +1503,12 @@
     _farr_array_get_meta "$@"
 
     __farr_pos=1
-    while [ ${__farr_pos} -le "${__farr_len}" ]; do
-        if [ ${__farr_pos} -eq 1 ]; then
+    while [ "${__farr_pos}" -le "${__farr_len}" ]; do
+        if [ "${__farr_pos}" -eq 1 ]; then
             __farr_pos=$((__farr_pos + 1))
         else
-            eval __farr_val=\"\$\{${__farr_gvrname}_${__farr_pos}\}\"
-            eval __farr_val_1=\"\$\{${__farr_gvrname}_$((__farr_pos - 1))\}\"
+            eval __farr_val=\"\$\{"${__farr_gvrname}"_"${__farr_pos}"\}\"
+            eval __farr_val_1=\"\$\{"${__farr_gvrname}"_$((__farr_pos - 1))\}\"
             if [ "${__farr_val}" '>' "${__farr_val_1}" ] || [ "${__farr_val}" '=' "${__farr_val_1}" ] ; then
                 __farr_pos=$((__farr_pos + 1))
             else
@@ -1563,24 +1563,24 @@
     __farr_start="${3-}"
     [ -z "${__farr_start}" ] && __farr_start=1
     _farr_make_index __farr_start "${__farr_start}" "${__farr_len}"
-    [ ${__farr_start} -lt 1 ] && _farr_fatal "start index must be >= 1"
+    [ "${__farr_start}" -lt 1 ] && _farr_fatal "start index must be >= 1"
     __farr_end="${4-}"
     [ -z "${__farr_end}" ] && __farr_end="${__farr_len}"
     _farr_make_index __farr_end "${__farr_end}" "${__farr_len}"
-    [ ${__farr_end} -lt 1 ] && [ ${__farr_len} -gt 0 ] && _farr_fatal "end index must be >= 1"
-    [ ${__farr_end} -gt "${__farr_len}" ] && _farr_fatal "end index exceeds array length"
+    [ "${__farr_end}" -lt 1 ] && [ "${__farr_len}" -gt 0 ] && _farr_fatal "end index must be >= 1"
+    [ "${__farr_end}" -gt "${__farr_len}" ] && _farr_fatal "end index exceeds array length"
     __farr_lo="${__farr_start}"
     __farr_hi="${__farr_end}"
     while [ "${__farr_lo}" -le "${__farr_hi}" ]; do
         __farr_mid=$((__farr_lo + ((__farr_hi-__farr_lo)/2) ))
-        eval __farr_mid_value=\"\$\{${__farr_gvrname}_${__farr_mid}\}\"
+        eval __farr_mid_value=\"\$\{"${__farr_gvrname}"_"${__farr_mid}"\}\"
         if [ "${__farr_searched_value}" '<' "${__farr_mid_value}" ]; then
             __farr_hi=$((__farr_mid - 1))
         elif [ "${__farr_searched_value}" '>' "${__farr_mid_value}" ]; then
             __farr_lo=$((__farr_mid + 1))
         else
             # found
-            eval "${__farr_varname}"=${__farr_mid}
+            setvar "${__farr_varname}" "${__farr_mid}"
             return 0
         fi
     done
@@ -1628,14 +1628,14 @@
     __farr_hi=$((__farr_len + 1))
     while [ "${__farr_lo}" -lt "${__farr_hi}" ]; do
         __farr_mid=$((__farr_lo + ((__farr_hi-__farr_lo)/2) ))
-        eval __farr_mid_value=\"\$\{${__farr_gvrname}_${__farr_mid}\}\"
+        eval __farr_mid_value=\"\$\{"${__farr_gvrname}"_"${__farr_mid}"\}\"
         if [ "${__farr_searched_value}" '>' "${__farr_mid_value}" ]; then
             __farr_lo=$((__farr_mid + 1))
         else
             __farr_hi=${__farr_mid}
         fi
     done
-    eval "${__farr_varname}"=${__farr_lo}
+    setvar "${__farr_varname}" "${__farr_lo}"
     return 0
 }
 
@@ -1663,17 +1663,17 @@
 
     __farr_separator="${2-" "}"
 
-    __farr_real_separator=""
-    __farr_command=""
+    __farr_real_separator=''
+    __farr_command=''
 
     __farr_join_idx=1
-    while [ ${__farr_join_idx} -le ${__farr_len} ]; do
-	eval __farr_current_value=\"\$\{${__farr_gvrname}_${__farr_join_idx}\}\"
+    while [ "${__farr_join_idx}" -le "${__farr_len}" ]; do
+	eval __farr_current_value=\"\$\{"${__farr_gvrname}"_"${__farr_join_idx}"\}\"
 	__farr_command="${__farr_command}${__farr_real_separator}${__farr_current_value}"
 	__farr_real_separator="${__farr_separator}"
 	__farr_join_idx=$((__farr_join_idx + 1))
     done
-    eval "${__farr_varname}"=\"\$\{__farr_command\}\"
+    setvar "${__farr_varname}" "${__farr_command}"
 }
 
 
@@ -1707,17 +1707,17 @@
 
     _farr_array_get_meta "$@"
 
-    __farr_real_separator=""
-    __farr_command=""
+    __farr_real_separator=''
+    __farr_command=''
 
     __farr_join_idx=1
-    while [ ${__farr_join_idx} -le ${__farr_len} ]; do
-	eval __farr_current_value=\"\$\{${__farr_gvrname}_${__farr_join_idx}\}\"
+    while [ "${__farr_join_idx}" -le "${__farr_len}" ]; do
+	eval __farr_current_value=\"\$\{"${__farr_gvrname}"_"${__farr_join_idx}"\}\"
 	__farr_command="${__farr_command}${__farr_real_separator}$(_farr_quote_for_eval "${__farr_current_value}")"
 	__farr_real_separator=' '
 	__farr_join_idx=$((__farr_join_idx + 1))
     done
-    eval "${__farr_varname}"=\"\$\{__farr_command\}\"
+    setvar "${__farr_varname}" "${__farr_command}"
 }
 
 
@@ -1744,12 +1744,12 @@
     _farr_array_get_meta "$@"
 
     __farr_join_idx=1
-    while [ ${__farr_join_idx} -le ${__farr_len} ]; do
-	eval __farr_current_value=\"\$\{${__farr_gvrname}_${__farr_join_idx}\}\"
-        if [ ${__farr_join_idx} -gt 1 ]; then
-            printf "%s" " "
+    while [ "${__farr_join_idx}" -le "${__farr_len}" ]; do
+	eval __farr_current_value=\"\$\{"${__farr_gvrname}"_"${__farr_join_idx}"\}\"
+        if [ "${__farr_join_idx}" -gt 1 ]; then
+            printf '%s' " "
         fi
-        printf "%s" "$(_farr_quote_for_eval "${__farr_current_value}")"
+        printf '%s' "$(_farr_quote_for_eval "${__farr_current_value}")"
 	__farr_join_idx=$((__farr_join_idx + 1))
     done
 }
@@ -1791,12 +1791,12 @@
     __farr_r_gvrname="${__farr_gvrname}"
     __farr_r_len="${__farr_len}"
 
-    [ ${__farr_l_len} -ne ${__farr_r_len} ] && return 1
+    [ "${__farr_l_len}" -ne "${__farr_r_len}" ] && return 1
 
     __farr_idx=1
-    while [ ${__farr_idx} -le ${__farr_l_len} ]; do
-        eval __farr_vl=\"\$\{${__farr_l_gvrname}_${__farr_idx}\}\"
-        eval __farr_vr=\"\$\{${__farr_r_gvrname}_${__farr_idx}\}\"
+    while [ "${__farr_idx}" -le "${__farr_l_len}" ]; do
+        eval __farr_vl=\"\$\{"${__farr_l_gvrname}"_"${__farr_idx}"\}\"
+        eval __farr_vr=\"\$\{"${__farr_r_gvrname}"_"${__farr_idx}"\}\"
         [ "${__farr_vl}" != "${__farr_vr}" ] && return 1
         __farr_idx=$((__farr_idx + 1))
     done
@@ -1843,13 +1843,13 @@
     shift 2
 
     __farr_idx=1
-    while [ ${__farr_idx} -le ${__farr_len} ]; do
-        eval __farr_feval=\"\$\{${__farr_gvrname}_${__farr_idx}\}\"
+    while [ "${__farr_idx}" -le "${__farr_len}" ]; do
+        eval __farr_feval=\"\$\{"${__farr_gvrname}"_"${__farr_idx}"\}\"
         _farr_acquire_object "${__farr_feval}"
 	eval "${__farr_callback} \"\${__farr_name:-\"\${__farr_gm_name_or_value}\"}\" \"\${__farr_idx}\" \"\${__farr_feval}\" \"\$@\""
 	__farr_rv=$?
         _farr_release_object "${__farr_feval}"
-	[ ${__farr_rv} -ne 0 ] && return ${__farr_rv}
+	[ "${__farr_rv}" -ne 0 ] && return "${__farr_rv}"
 	__farr_idx=$((__farr_idx + 1))
     done
     return 0
@@ -1874,14 +1874,14 @@
 
     shift 2
 
-    __farr_idx=${__farr_len}
-    while [ ${__farr_idx} -gt 0 ]; do
-        eval __farr_feval=\"\$\{${__farr_gvrname}_${__farr_idx}\}\"
+    __farr_idx="${__farr_len}"
+    while [ "${__farr_idx}" -gt 0 ]; do
+        eval __farr_feval=\"\$\{"${__farr_gvrname}"_"${__farr_idx}"\}\"
         _farr_acquire_object "${__farr_feval}"
 	eval "${__farr_callback} \"\${__farr_name:-\"\${__farr_gm_name_or_value}\"}\" \"\${__farr_idx}\" \"\${__farr_feval}\" \"\$@\""
 	__farr_rv=$?
         _farr_release_object "${__farr_feval}"
-	[ ${__farr_rv} -ne 0 ] && return ${__farr_rv}
+	[ "${__farr_rv}" -ne 0 ] && return ${__farr_rv}
 	__farr_idx=$((__farr_idx - 1))
     done
     return 0
@@ -1929,7 +1929,7 @@
     else
         printf "%sDEBUG: array with token \`%s' has length %s\\n" "${__farr_debug_indent}" "${__farr_token}" "${__farr_len}" 1>&2
     fi
-    if [ ${__farr_len} -gt 0 ]; then
+    if [ "${__farr_len}" -gt 0 ]; then
         printf '%sDEBUG:   the items:\n' "${__farr_debug_indent}" 1>&2
         farray_for_each "${__farr_name_or_token}" _farr_debug_print_value  "${__farr_debug_indent}" || true
     fi