From 650845dee4c2d677e3b0983a4d2625f9fb872832 Mon Sep 17 00:00:00 2001 From: Ethan P Date: Sat, 3 Apr 2021 17:16:15 -0700 Subject: [PATCH] lib: Fix 'getargs' setting an empty string when no args are left --- lib/opt.sh | 6 +++++- test/suite/lib_opt.sh | 8 +++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/opt.sh b/lib/opt.sh index 8491062..cdc85ea 100644 --- a/lib/opt.sh +++ b/lib/opt.sh @@ -61,7 +61,11 @@ getargs() { eval "$2=(\"\${$2[@]}\" $(printf '%q ' "${_ARGV[@]:$_ARGV_INDEX}"))" fi else - eval "$1=($(printf '%q ' "${_ARGV[@]:$_ARGV_INDEX}"))" + if [[ "${_ARGV_INDEX}" -ne "$((_ARGV_LAST+1))" ]]; then + eval "$1=($(printf '%q ' "${_ARGV[@]:$_ARGV_INDEX}"))" + else + eval "$1=()" + fi fi } diff --git a/test/suite/lib_opt.sh b/test/suite/lib_opt.sh index afe4e11..f3e24d9 100644 --- a/test/suite/lib_opt.sh +++ b/test/suite/lib_opt.sh @@ -413,7 +413,13 @@ test:fn_getargs() { # Ensure getargs doesn't remove remaining arguments. shiftopt - assert_opt_name "three" + assert_opt_name "three" + + # Ensure it doesn't set an empty string. + args=(one two) + setargs + getargs args + assert_equal 0 "${#args[@]}" } test:fn_getargs_append() {