From f649a18a75b164b88072774418c318360dfa3267 Mon Sep 17 00:00:00 2001 From: Zane Duffield Date: Wed, 14 Jan 2026 11:20:55 +1100 Subject: [PATCH] Fix array expansion errors on unknown parameter names When unexpected parameters are passed to cmdarg, the shell (bash 5.1.8) spits out some error messages about bad array subscripts, for example > cmdarg.sh: line 333: CMDARG_FLAGS: bad array subscript > cmdarg.sh: line 334: CMDARG_FLAGS: bad array subscript > cmdarg.sh: line 340: CMDARG: bad array subscript This occurs because the array is being indexed by a null value, so to prevent it we must guard all such uses with a check. --- cmdarg.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmdarg.sh b/cmdarg.sh index d909948..cee3f35 100644 --- a/cmdarg.sh +++ b/cmdarg.sh @@ -326,7 +326,7 @@ function cmdarg_parse ${CMDARG_ERROR_BEHAVIOR} 1 fi - if [[ $is_equals_arg -eq 1 ]]; then + if [[ $is_equals_arg -eq 1 && -n "$opt" ]]; then if [[ ${CMDARG_FLAGS[$opt]} -eq ${CMDARG_FLAG_REQARG} ]] || \ [[ ${CMDARG_FLAGS[$opt]} -eq ${CMDARG_FLAG_OPTARG} ]]; then optarg=$1 @@ -334,7 +334,7 @@ function cmdarg_parse fi fi - if [ ${CMDARG["${opt}"]+abc} ]; then + if [ -n "$opt" ] && [ ${CMDARG["${opt}"]+abc} ]; then cmdarg_set_opt "${CMDARG[$opt]}" "$optarg" local rc=$? failed=$((failed + $rc))