If values have spaces (and as a general rule) I vote for glenn jackman's answer, but I'd simplify it by passing the array as the last argument. After all, it seems that you can't have multiple array arguments, unless you do some complicated logic to detect their boundaries.
So I'd do:
ARRAY=("the first" "the second" "the third")
test.sh argument1 argument2 "${ARRAY[@]}"
which is the same as:
test.sh argument1 argument2 "the first" "the second" "the third"
And in test.sh do:
ARG1="$1"; shift
ARG2="$1"; shift
ARRAY=("$@")
If values have no spaces (i.e. they are urls, identifiers, numbers, etc) here's a simpler alternative. This way you can actually have multiple array arguments and it's easy to mix them with normal arguments:
ARRAY1=(one two three)
ARRAY2=(four five)
test.sh argument1 "${ARRAY1[*]}" argument3 "${ARRAY2[*]}"
which is the same as:
test.sh argument1 "one two three" argument3 "four five"
And in test.sh you do:
ARG1="$1"
ARRAY1=($2) # Note we don't use quotes now
ARG3="$3"
ARRAY2=($4)
I hope this helps. I wrote this to help (you and me) understand how arrays work, and how * an @ work with arrays.