set -x var_123=123 f() { while (( $# )); do shift local var=var_123 local -n var=$var; : status is $? local -p : var is $var done }
f one two Running above script gives the follow output: + var_123=123 + f one two + (( 2 )) + shift + local var=var_123 + local -n var=var_123 + : status is 0 + local -p var=var_123 + : var is 123 + (( 1 )) + shift + local var=var_123 + local -n var=123 ./x.sh: line 10: local: `123': invalid variable name for name reference + : status is 1 + local -p var=var_123 + : var is 123 + (( 0 )) With Bash 4.3 the output is: + var_123=123 + f one two + (( 2 )) + shift + local var=var_123 + local -n var=var_123 + : status is 0 + local -p var=var_123 + : var is 123 + (( 1 )) + shift + local var=var_123 + local -n var=var_123 + : status is 0 + local -p var=var_123 + : var is 123 + (( 0 )) Thanks Jack