Your positional parameters do not contain any double quotes in your example:
./script1 a "bc d"
The double quotes there are simply to tell the shell that no word splitting should be performed on the space between `bc` and `d`.
If you want your second parameter to contain literal quotes you need to escape them to tell the shell they are literals:
./script1 a '"bc d"'
or
./script1 a \"bc\ d\"
You can use `printf` to print them in a format that can reused as shell input (escaped):
$ set -- a "bc d"
$ printf '%q\
' "$@"
a
bc\ d
As you can see this only escapes the space though.