# declare an array of variables
$ declare -a vars=("domain_name" "port" "username")
$ echo ${vars[0]}
domain_name
# Assign a value to it
$ let ${vars[0]}="hello"
# use the variable directly
$ echo $domain_name
5
Answer should be "hello"
# declare an array of variables
$ declare -a vars=("domain_name" "port" "username")
$ echo ${vars[0]}
domain_name
# Assign a value to it
$ let ${vars[0]}="hello"
# use the variable directly
$ echo $domain_name
5
Answer should be "hello"
 
    
     
    
    declare -n makes a variable a reference to another variable. If we do declare -n foo=bar then $foo evaluates to $bar, and changing $foo changes $bar.
You can use this to set ref=domain_name, after which assigning to $ref will update $domain_name:
$ declare -a vars=("domain_name" "port" "username")
$ declare -n ref=${vars[0]}
$ ref=hello
$ echo $domain_name
hello
You can also use it to update an array item. See the difference if we set ref=vars[0] instead:
$ declare -a vars=("domain_name" "port" "username")
$ declare -n ref=vars[0]
$ ref=hello
$ declare -p vars
declare -a vars=([0]="hello" [1]="port" [2]="username")
