shas's answer is good, and I'd like to add that the export attribute of a variable doesn't have to be set after a value is assigned into the variable. This means you can have the exports where they don't distract from the main flow of the script:
# prep for user input
export region
export HOST
export localport
export username
# prompt user for input
echo 'Please enter REGION to login :'
read region
echo 'Please enter HOST to login :'
read HOST
echo 'Please enter Port to login :'
read localport
echo 'Please enter username to login :'
read username
# show and invoke the sql command
echo "sql \"host=$HOST port=$localport user=$username --region=$region\""
sql "host=$HOST port=$localport user=$username --region=$region"
Further, export can take the names of multiple variables to set the attribute, making that part of the code shorter:
# prep for user input
export region HOST localport username
# prompt user for input
echo 'Please enter REGION to login :'
read region
echo 'Please enter HOST to login :'
read HOST
echo 'Please enter Port to login :'
read localport
echo 'Please enter username to login :'
read username
# show and invoke the sql command
echo "sql \"host=$HOST port=$localport user=$username --region=$region\""
sql "host=$HOST port=$localport user=$username --region=$region"
(I also wrapped the prompt strings in single quote marks, since they don't expand any variables, and echoed the sql command before invoking it, so the user knows what the script is doing if the sql command hangs)
", and not some other fancy or "smart" quote. Check the whole script, not just that part. Syntax highlighting often helps, as a quoted string where the other part is the ASCII quote and the other something else often leaves everything after it colored as a quoted string. There's nothing wrong with that snippet, as far as I can see.