changeset 536:b0148ccbc459

farray.sh: handle most of the shellcheck suggestions
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 09 Sep 2024 14:13:51 +0200
parents 33b55434d039
children 62cd970aea9c
files share/local-bsdtools/farray.sh
diffstat 1 files changed, 87 insertions(+), 80 deletions(-) [+]
line wrap: on
line diff
--- a/share/local-bsdtools/farray.sh	Mon Sep 09 13:31:58 2024 +0200
+++ b/share/local-bsdtools/farray.sh	Mon Sep 09 14:13:51 2024 +0200
@@ -72,6 +72,9 @@
 #:
 
 
+# shellcheck disable=2004,2166,3003,3043
+
+
 _farr_array_prefix=_farr_A_
 _farr_alist_prefix=_farr_KV_
 _farr_alist_key_prefix=_farr_K_
@@ -154,7 +157,7 @@
 
     __farr_name="${1-}"
     [ -z "${__farr_name}" ] && _farr_fatal "missing farray name"
-    eval __farr_token=\"\${${__farr_name}-}\"
+    eval __farr_token=\"\$\{"${__farr_name}"-\}\"
     [ -n "${__farr_token}" ] && _farr_fatal "object \`${__farr_name}' already created (token \`${__farr_token}')"
 
     __farr_token="$(/usr/bin/hexdump -v -e '/1 "%02x"' -n 16 '/dev/urandom')"
@@ -163,13 +166,13 @@
     shift
 
     # 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
     # And associate the token with the array name
-    eval ${__farr_name}="${__farr_token}"
+    eval "${__farr_name}"="${__farr_token}"
 
     for __farr_el in "$@"; do
 	farray_append ${__farr_name} "${__farr_el}"
@@ -195,13 +198,14 @@
 _farr_array_get_meta() {
     __farr_name="${1-}"
     [ -z "${__farr_name}" ] && _farr_fatal "missing farray name"
-    eval __farr_token=\"\${${__farr_name}-}\"
+    eval __farr_token=\"\$\{"${__farr_name}"-\}\"
     [ -z "${__farr_token}" ] && _farr_fatal "farray \`${__farr_name}' does not exist: token empty"
     __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}' does not exist: no storage for token \`${__farr_token}'"
-    eval __farr_len="\$((\${${__farr_gvrname}__} + 0))"
+#    eval __farr_len="\$((\${${__farr_gvrname}__} + 0))"
+    eval __farr_len="\$((${__farr_gvrname}__ + 0))"
     return 0
 }
 
@@ -230,19 +234,20 @@
     __farr_token=""
     __farr_gvrname=""
     __farr_len=""
-    eval __farr_token=\"\${${__farr_name}-}\"
+    eval __farr_token=\"\$\{"${__farr_name}"-\}\"
     if [ -z "${__farr_token}" ]; then
         _farr_err "farray \`${__farr_name}' does not exist: token empty"
         return 1;
     fi
     __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}' does not exist: no storage for token \`${__farr_token}'"
         return 1
     fi
-    eval __farr_len="\$((\${${__farr_gvrname}__} + 0))"
+    # eval __farr_len="\$((\${${__farr_gvrname}__} + 0))"
+    eval __farr_len="\$((${__farr_gvrname}__ + 0))"
     return 0
 }
 
@@ -263,7 +268,7 @@
     [ -z "${__farr_varname}" ] && _farr_fatal "missing variable name"
     shift
     _farr_array_get_meta "$@"
-    eval ${__farr_varname}=${__farr_len}
+    eval "${__farr_varname}"=${__farr_len}
 }
 
 
@@ -305,7 +310,7 @@
 
     __farr_value="${2-}"
 
-    __farr_len_1=$((${__farr_len} + 1))
+    __farr_len_1=$((__farr_len + 1))
 
     #
     # Set value
@@ -342,7 +347,7 @@
     __farr_index="${2-}"
     [ -z "${__farr_index}" ] && _farr_fatal "no valid index for set given"
     # make it to a number
-    __farr_index=$((${__farr_index} + 0))
+    __farr_index=$((__farr_index + 0))
     __farr_value="${3-}"
 
     # For proper quoting: see farray_append
@@ -350,7 +355,7 @@
         # replace a value at an existing index
         eval ${__farr_gvrname}_${__farr_index}=\$\'"$(_farr_quote_for_eval_dsq "${__farr_value}")"\'
     else
-        __farr_len_1=$((${__farr_len} + 1))
+        __farr_len_1=$((__farr_len + 1))
         if [ ${__farr_index} -eq ${__farr_len_1} ]; then
             # append value
             eval ${__farr_gvrname}_${__farr_len_1}=\$\'"$(_farr_quote_for_eval_dsq "${__farr_value}")"\'
@@ -383,14 +388,14 @@
     __farr_index="${2-}"
     [ -z "${__farr_index}" ] && _farr_fatal "no valid index given"
     # make it to a number
-    __farr_index=$((${__farr_index} + 0))
+    __farr_index=$((__farr_index + 0))
 
     # check index range
     if [ \( "${__farr_index}" -lt 1 \) -o \( "${__farr_index}" -gt ${__farr_len} \) ]; then
 	_farr_fatal "array index out of bounds"
     fi
 
-    eval ${__farr_varname}=\"\${${__farr_gvrname}_${__farr_index}}\"
+    eval "${__farr_varname}"=\"\$\{${__farr_gvrname}_${__farr_index}\}\"
 }
 
 
@@ -423,14 +428,14 @@
     __farr_index="${2-}"
     [ -z "${__farr_index}" ] && _farr_fatal "no valid index given"
     # make it to a number
-    __farr_index=$((${__farr_index} + 0))
+    __farr_index=$((__farr_index + 0))
 
     # check index range
     if [ \( "${__farr_index}" -lt 1 \) -o \( "${__farr_index}" -gt ${__farr_len} \) ]; then
 	return 1
     fi
 
-    eval ${__farr_varname}=\"\${${__farr_gvrname}_${__farr_index}}\"
+    eval "${__farr_varname}"=\"\$\{${__farr_gvrname}_${__farr_index}\}\"
     return 0
 }
 
@@ -452,22 +457,22 @@
     __farr_index="${2-}"
     [ -z "${__farr_index}" ] && _farr_fatal "no valid index given"
     # make it to a number
-    __farr_index=$((${__farr_index} + 0))
+    __farr_index=$((__farr_index + 0))
 
     # check index range
     if [ \( "${__farr_index}" -lt 1 \) -o \( "${__farr_index}" -gt ${__farr_len} \) ]; then
 	_farr_fatal "array index out of bounds"
     fi
 
-    __farr_new_len=$((${__farr_len} - 1))
+    __farr_new_len=$((__farr_len - 1))
     __farr_idx=${__farr_index}
-    __farr_idx_1=$((${__farr_idx} + 1))
+    __farr_idx_1=$((__farr_idx + 1))
     while [ ${__farr_idx} -lt ${__farr_len} ]; do
         # copy the following value to the current index
-        eval __farr_value=\"\${${__farr_gvrname}_${__farr_idx_1}}\"
+        eval __farr_value=\"\$\{${__farr_gvrname}_${__farr_idx_1}\}\"
         eval ${__farr_gvrname}_${__farr_idx}=\$\'"$(_farr_quote_for_eval_dsq "${__farr_value}")"\'
-        __farr_idx=$((${__farr_idx} + 1))
-        __farr_idx_1=$((${__farr_idx} + 1))
+        __farr_idx=$((__farr_idx + 1))
+        __farr_idx_1=$((__farr_idx + 1))
     done
     # Drop the last item
     eval unset ${__farr_gvrname}_${__farr_idx}
@@ -492,7 +497,7 @@
     __farr_idx=1
     while [ ${__farr_idx} -le ${__farr_len} ]; do
 	eval unset ${__farr_gvrname}_${__farr_idx}
-	__farr_idx=$((${__farr_idx} + 1))
+	__farr_idx=$((__farr_idx + 1))
     done
 
     # Length is now zero
@@ -523,7 +528,7 @@
     __farr_idx=1
     while [ ${__farr_idx} -le ${__farr_len} ]; do
 	eval unset ${__farr_gvrname}_${__farr_idx}
-	__farr_idx=$((${__farr_idx} + 1))
+	__farr_idx=$((__farr_idx + 1))
     done
 
     # Remove length itselt
@@ -557,9 +562,9 @@
 
     __farr_idx=1
     while [ ${__farr_idx} -le ${__farr_len} ]; do
-        eval __farr_existing_value=\"\${${__farr_gvrname}_${__farr_idx}}\"
+        eval __farr_existing_value=\"\$\{${__farr_gvrname}_${__farr_idx}\}\"
         [ "${__farr_existing_value}" = "${__farr_searched_value}" ] && return 0
-	__farr_idx=$((${__farr_idx} + 1))
+	__farr_idx=$((__farr_idx + 1))
     done
     return 1
 }
@@ -605,13 +610,13 @@
 
     __farr_cur_idx=${__farr_start}
     while [ ${__farr_cur_idx} -le ${__farr_end} ]; do
-        eval __farr_existing_value=\"\${${__farr_gvrname}_${__farr_cur_idx}}\"
+        eval __farr_existing_value=\"\$\{${__farr_gvrname}_${__farr_cur_idx}\}\"
         if [ "${__farr_existing_value}" = "${__farr_searched_value}" ]; then
             #printf "%d" ${__farr_cur_idx}
-            eval ${__farr_varname}=${__farr_cur_idx}
+            eval "${__farr_varname}"=${__farr_cur_idx}
             return 0
         fi
-	__farr_cur_idx=$((${__farr_cur_idx} + 1))
+	__farr_cur_idx=$((__farr_cur_idx + 1))
     done
     return 1
 }
@@ -645,12 +650,12 @@
 
     __farr_join_idx=1
     while [ ${__farr_join_idx} -le ${__farr_len} ]; do
-	eval __farr_current_value=\"\${${__farr_gvrname}_${__farr_join_idx}}\"
+	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))
+	__farr_join_idx=$((__farr_join_idx + 1))
     done
-    eval ${__farr_varname}=\"\${__farr_command}\"
+    eval "${__farr_varname}"=\"\$\{__farr_command\}\"
 }
 
 
@@ -689,12 +694,12 @@
 
     __farr_join_idx=1
     while [ ${__farr_join_idx} -le ${__farr_len} ]; do
-	eval __farr_current_value=\"\${${__farr_gvrname}_${__farr_join_idx}}\"
+	eval __farr_current_value=\"\$\{${__farr_gvrname}_${__farr_join_idx}\}\"
 	__farr_command="${__farr_command}${__farr_real_separator}\$'$(_farr_quote_for_eval_dsq "${__farr_current_value}")'"
 	__farr_real_separator=' '
-	__farr_join_idx=$((${__farr_join_idx} + 1))
+	__farr_join_idx=$((__farr_join_idx + 1))
     done
-    eval ${__farr_varname}=\"\${__farr_command}\"
+    eval "${__farr_varname}"=\"\$\{__farr_command\}\"
 }
 
 
@@ -722,12 +727,12 @@
 
     __farr_join_idx=1
     while [ ${__farr_join_idx} -le ${__farr_len} ]; do
-	eval __farr_current_value=\"\${${__farr_gvrname}_${__farr_join_idx}}\"
+	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_dsq "${__farr_current_value}")'"
-	__farr_join_idx=$((${__farr_join_idx} + 1))
+	__farr_join_idx=$((__farr_join_idx + 1))
     done
 }
 
@@ -767,7 +772,7 @@
 	eval "${__farr_callback} ${__farr_name} ${__farr_idx} \"\${${__farr_gvrname}_${__farr_idx}}\""
 	__farr_rv=$?
 	[ ${__farr_rv} -ne 0 ] && return ${__farr_rv}
-	__farr_idx=$((${__farr_idx} + 1))
+	__farr_idx=$((__farr_idx + 1))
     done
     return 0
 }
@@ -790,7 +795,7 @@
 	eval "${__farr_callback} ${__farr_name} ${__farr_idx} \"\${${__farr_gvrname}_${__farr_idx}}\""
 	__farr_rv=$?
 	[ ${__farr_rv} -ne 0 ] && return ${__farr_rv}
-	__farr_idx=$((${__farr_idx} - 1))
+	__farr_idx=$((__farr_idx - 1))
     done
     return 0
 }
@@ -850,7 +855,7 @@
 
     __farr_name="${1-}"
     [ -z "${__farr_name}" ] && _farr_fatal "missing falist name"
-    eval __farr_token=\"\${${__farr_name}-}\"
+    eval __farr_token=\"\$\{"${__farr_name}"-\}\"
     [ -n "${__farr_token}" ] && _farr_fatal "object \`${__farr_name}' already created (token \`${__farr_token}')"
 
     __farr_token="$(/usr/bin/hexdump -v -e '/1 "%02x"' -n 16 '/dev/urandom')"
@@ -860,14 +865,14 @@
     __farr_valname=${_farr_alist_value_prefix}${__farr_token}
 
     # Check whether the variable already exists
-    eval __farr_len=\${${__farr_objname}__+SET}
+    eval __farr_len=\$\{${__farr_objname}__+SET\}
     [ -n "${__farr_len}" ] && _farr_fatal "falist \`${__farr_name}' already exists: existing token \`${__farr_token}'"
 
     # Really create the storage by initializing its length
     eval ${__farr_objname}__=0
 
     # And associate the token with the array name
-    eval ${__farr_name}="${__farr_token}"
+    eval "${__farr_name}"="${__farr_token}"
 }
 
 
@@ -891,16 +896,17 @@
 _farr_alist_get_meta() {
     __farr_name="${1-}"
     [ -z "${__farr_name}" ] && _farr_fatal "missing farray name"
-    eval __farr_token=\"\${${__farr_name}-}\"
+    eval __farr_token=\"\$\{"${__farr_name}"-\}\"
     [ -z "${__farr_token}" ] && _farr_fatal _farr_err "falist \`${__farr_name}' does not exist: token empty"
 
     __farr_objname="${_farr_alist_prefix}${__farr_token}"
     __farr_keyname=${_farr_alist_key_prefix}${__farr_token}
     __farr_valname=${_farr_alist_value_prefix}${__farr_token}
 
-    eval __farr_len=\${${__farr_objname}__:+SET}
+    eval __farr_len=\$\{${__farr_objname}__:+SET\}
     [ -z "${__farr_len}" ] && _farr_fatal "falist \`${__farr_name}' does not exist: no object for token \`${__farr_token}'"
-    eval __farr_len="\$((\${${__farr_objname}__} + 0))"
+    # eval __farr_len="\$((\${${__farr_objname}__} + 0))"
+    eval __farr_len="\$((${__farr_objname}__ + 0))"
     return 0
 }
 
@@ -933,7 +939,7 @@
     __farr_keyname=""
     __farr_valname=""
     __farr_len=""
-    eval __farr_token=\"\${${__farr_name}-}\"
+    eval __farr_token=\"\$\{"${__farr_name}"-\}\"
     if [ -z "${__farr_token}" ]; then
         _farr_err "falist \`${__farr_name}' does not exist: token empty"
         return 1;
@@ -943,12 +949,13 @@
     __farr_keyname=${_farr_alist_key_prefix}${__farr_token}
     __farr_valname=${_farr_alist_value_prefix}${__farr_token}
 
-    eval __farr_len=\${${__farr_objname}__:+SET}
+    eval __farr_len=\$\{${__farr_objname}__:+SET\}
     if [ -z "${__farr_len}" ]; then
         _farr_err "falist \`${__farr_name}' does not exist: no object for token \`${__farr_token}'"
         return 1
     fi
-    eval __farr_len="\$((\${${__farr_objname}__} + 0))"
+    # eval __farr_len="\$((\${${__farr_objname}__} + 0))"
+    eval __farr_len="\$((${__farr_objname}__ + 0))"
     return 0
 }
 
@@ -969,7 +976,7 @@
     [ -z "${__farr_varname}" ] && _farr_fatal "missing variable name"
     shift
     _farr_alist_get_meta "$@"
-    eval ${__farr_varname}=${__farr_len}
+    eval "${__farr_varname}"=${__farr_len}
 }
 
 
@@ -1013,7 +1020,7 @@
     while [ ${__farr_idx} -le ${__farr_len} ]; do
         eval unset ${__farr_valname}_${__farr_idx}
         eval unset ${__farr_keyname}_${__farr_idx}
-        __farr_idx=$((${__farr_idx} + 1))
+        __farr_idx=$((__farr_idx + 1))
     done
 
     # Reset object (length) itself
@@ -1047,7 +1054,7 @@
     while [ ${__farr_idx} -le ${__farr_len} ]; do
         eval unset ${__farr_valname}_${__farr_idx}
         eval unset ${__farr_keyname}_${__farr_idx}
-        __farr_idx=$((${__farr_idx} + 1))
+        __farr_idx=$((__farr_idx + 1))
     done
 
     # Remove object (length) itselt
@@ -1084,9 +1091,9 @@
 
     __farr_idx=1
     while [ ${__farr_idx} -le ${__farr_len} ]; do
-        eval __farr_elkey=\"\${${__farr_keyname}_${__farr_idx}+SET}\"
+        eval __farr_elkey=\"\$\{${__farr_keyname}_${__farr_idx}+SET\}\"
         if [ -n "${__farr_elkey}" ]; then
-            eval __farr_elkey=\"\${${__farr_keyname}_${__farr_idx}}\"
+            eval __farr_elkey=\"\$\{${__farr_keyname}_${__farr_idx}\}\"
             if [ "${__farr_elkey}" = "${__farr_key}" ]; then
                 eval ${__farr_valname}_${__farr_idx}=\$\'"$(_farr_quote_for_eval_dsq "${__farr_value}")"\'
                 return 0
@@ -1094,7 +1101,7 @@
         else
             _farr_fatal "key unexpectedly unset (index ${__farr_idx})" 1>&2
         fi
-        __farr_idx=$((${__farr_idx} + 1))
+        __farr_idx=$((__farr_idx + 1))
     done
     #
     # Not yet found: "append" ..
@@ -1139,17 +1146,17 @@
 
     __farr_idx=1
     while [ ${__farr_idx} -le ${__farr_len} ]; do
-        eval __farr_getkey=\"\${${__farr_keyname}_${__farr_idx}+SET}\"
+        eval __farr_getkey=\"\$\{${__farr_keyname}_${__farr_idx}+SET\}\"
         if [ -n "${__farr_getkey}" ]; then
-            eval __farr_getkey=\"\${${__farr_keyname}_${__farr_idx}}\"
+            eval __farr_getkey=\"\$\{${__farr_keyname}_${__farr_idx}\}\"
             if [ "${__farr_getkey}" = "${__farr_key}" ]; then
-                eval ${__farr_varname}=\"\${${__farr_valname}_${__farr_idx}}\"
+                eval "${__farr_varname}"=\"\$\{${__farr_valname}_${__farr_idx}\}\"
                 return 0
             fi
         else
             _farr_fatal "key unexpectedly unset (index ${__farr_idx})" 1>&2
         fi
-        __farr_idx=$((${__farr_idx} + 1))
+        __farr_idx=$((__farr_idx + 1))
     done
     _farr_fatal "alist \`${__farr_name}': key \`${__farr_key}' not found"
 }
@@ -1183,17 +1190,17 @@
 
     __farr_idx=1
     while [ ${__farr_idx} -le ${__farr_len} ]; do
-        eval __farr_getkey=\"\${${__farr_keyname}_${__farr_idx}+SET}\"
+        eval __farr_getkey=\"\$\{${__farr_keyname}_${__farr_idx}+SET\}\"
         if [ -n "${__farr_getkey}" ]; then
-            eval __farr_getkey=\"\${${__farr_keyname}_${__farr_idx}}\"
+            eval __farr_getkey=\"\$\{${__farr_keyname}_${__farr_idx}\}\"
             if [ "${__farr_getkey}" = "${__farr_key}" ]; then
-                eval ${__farr_varname}=\"\${${__farr_valname}_${__farr_idx}}\"
+                eval "${__farr_varname}"=\"\$\{${__farr_valname}_${__farr_idx}\}\"
                 return 0
             fi
         else
             _farr_fatal "key unexpectedly unset (index ${__farr_idx})"
         fi
-        __farr_idx=$((${__farr_idx} + 1))
+        __farr_idx=$((__farr_idx + 1))
     done
     return 1
 }
@@ -1231,9 +1238,9 @@
     __farr_index=$(($2 + 0))
 
     if [ \( ${__farr_index} -ge 1 \) -a \( ${__farr_index} -le ${__farr_len} \) ]; then
-        eval __farr_getikey=\"\${${__farr_keyname}_${__farr_index}+SET}\"
+        eval __farr_getikey=\"\$\{${__farr_keyname}_${__farr_index}+SET\}\"
         if [ -n "${__farr_getikey}" ]; then
-            eval ${__farr_varname}=\"\${${__farr_keyname}_${__farr_index}}\"
+            eval "${__farr_varname}"=\"\$\{${__farr_keyname}_${__farr_index}\}\"
             return 0
         else
             _farr_fatal "key unexpectedly unset (index ${__farr_index})"
@@ -1276,9 +1283,9 @@
     __farr_index=$(($2 + 0))
 
     if [ \( ${__farr_index} -ge 1 \) -a \( ${__farr_index} -le ${__farr_len} \) ]; then
-        eval __farr_getival=\"\${${__farr_valname}_${__farr_index}+SET}\"
+        eval __farr_getival=\"\$\{${__farr_valname}_${__farr_index}+SET\}\"
         if [ -n "${__farr_getival}" ]; then
-            eval ${__farr_varname}=\"\${${__farr_valname}_${__farr_index}}\"
+            eval "${__farr_varname}"=\"\$\{${__farr_valname}_${__farr_index}\}\"
             return 0
         else
             _farr_fatal "value unexpectedly unset (index ${__farr_index})"
@@ -1312,16 +1319,16 @@
 
     __farr_idx=1
     while [ ${__farr_idx} -le ${__farr_len} ]; do
-        eval __farr_cokey=\"\${${__farr_keyname}_${__farr_idx}+SET}\"
+        eval __farr_cokey=\"\$\{${__farr_keyname}_${__farr_idx}+SET\}\"
         if [ -n "${__farr_cokey}" ]; then
-            eval __farr_cokey=\"\${${__farr_keyname}_${__farr_idx}}\"
+            eval __farr_cokey=\"\$\{${__farr_keyname}_${__farr_idx}\}\"
             if [ "${__farr_cokey}" = "${__farr_key}" ]; then
                 return 0
             fi
         else
             _farr_fatal "key unexpectedly unset (index ${__farr_idx})" 1>&2
         fi
-        __farr_idx=$((${__farr_idx} + 1))
+        __farr_idx=$((__farr_idx + 1))
     done
     return 1
 }
@@ -1360,12 +1367,12 @@
 
     __farr_feidx=1
     while [ ${__farr_feidx} -le ${__farr_len} ]; do
-        eval __farr_fekey=\"\${${__farr_keyname}_${__farr_feidx}+SET}\"
+        eval __farr_fekey=\"\$\{${__farr_keyname}_${__farr_feidx}+SET\}\"
         if [ -n "${__farr_fekey}" ]; then
-            eval __farr_fekey=\"\${${__farr_keyname}_${__farr_feidx}}\"
-            eval __farr_feval=\"\${${__farr_valname}_${__farr_feidx}+SET}\"
+            eval __farr_fekey=\"\$\{${__farr_keyname}_${__farr_feidx}\}\"
+            eval __farr_feval=\"\$\{${__farr_valname}_${__farr_feidx}+SET\}\"
             if [ -n "${__farr_feval}" ]; then
-                eval __farr_feval=\"\${${__farr_valname}_${__farr_feidx}}\"
+                eval __farr_feval=\"\$\{${__farr_valname}_${__farr_feidx}\}\"
                 eval "${__farr_callback} ${__farr_name} \"\${__farr_fekey}\" \"\${__farr_feval}\" ${__farr_feidx}"
                 __farr_rv=$?
                 [ ${__farr_rv} -ne 0 ] && return ${__farr_rv}
@@ -1375,7 +1382,7 @@
         else
             _farr_fatal "alist \`${__farr_name}': missing value index"
         fi
-        __farr_feidx=$((${__farr_feidx} + 1))
+        __farr_feidx=$((__farr_feidx + 1))
     done
     return 0
 }
@@ -1404,20 +1411,20 @@
     echo "DEBUG: alist \`${__farr_name}' has length ${__farr_len}" 1>&2
     __farr_idx=1
     while [ ${__farr_idx} -le ${__farr_len} ]; do
-        eval __farr_el_key=\"\${${__farr_keyname}_${__farr_idx}+SET}\"
+        eval __farr_el_key=\"\$\{${__farr_keyname}_${__farr_idx}+SET\}\"
         if [ -z "${__farr_el_key}" ]; then
             echo "DEBUG: key unexpectedly unset (index ${__farr_idx})" 1>&2
         fi
-        eval __farr_el_val=\"\${${__farr_valname}_${__farr_idx}+SET}\"
+        eval __farr_el_val=\"\$\{${__farr_valname}_${__farr_idx}+SET\}\"
         if [ -z "${__farr_el_val}" ]; then
             echo "DEBUG: value unexpectedly unset (index ${__farr_idx})" 1>&2
         fi
         if [ \( -n "${__farr_el_key}" \) -a \( -n "${__farr_el_val}" \) ]; then
-            eval __farr_el_key=\"\${${__farr_keyname}_${__farr_idx}}\"
-            eval __farr_el_val=\"\${${__farr_valname}_${__farr_idx}}\"
+            eval __farr_el_key=\"\$\{${__farr_keyname}_${__farr_idx}\}\"
+            eval __farr_el_val=\"\$\{${__farr_valname}_${__farr_idx}\}\"
             printf "DEBUG:     \`%s' -> \`%s'\\n" "${__farr_el_key}" "${__farr_el_val}" 1>&2
         fi
-        __farr_idx=$((${__farr_idx} + 1))
+        __farr_idx=$((__farr_idx + 1))
     done
     return 0
 }