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

Reply via email to