@choroba answer is good but you need to know that $0 is not in $@. As well here is an alternative:
printf -v myvar '%q ' "$@"
Then you have the strings shell escaped and thus will be correctly interpreted as separate arguments. And let me not forget - you need to use eval
for invoking the command from the variables!
btw here $myvar is a normal string variable. It is not an array like in the above case. It is just that separate arguments are shell escaped with spaces in between.
Hope this helps.
Resources: