This doesn't have anything to do with associative arrays and everything to do with "test" and quoting. On Wed, Apr 17, 2024 at 2:37 PM limited time wrote: > % zsh -f > % typeset -A array=(key1 value1 key2 value2); > test $array[key1] ; echo $? ; > test $array[key2] ; echo $? ; > These two are "test somestring" which is defined as true. > test $array[key3] ; echo $? ; > test $array[key4] ; echo $? ; > These two are just "test" (with no arguments at all, because key3 and key4 have no value) which is defined as false. > if test $array[key1] -a $array[key2] ; then > echo "Condition evaluated to true" ; > fi > This is "test string -a string" which is true because neither string is empty. > if test $array[key3] -a $array[key4] ; then > echo "Condition evaluated to true" ; > fi > This is "test -a" because both expansions are empty and not quoted so they disappear from the command line entirely. By definition, "test -a" is treated as "test somestring" and is true.