See following script result: bash# cat declare-g.sh #!/bin/bash
var=global f1() { declare var=local f2 echo 3.$var } f2() { declare -g var echo 1.$var var=global-changed echo 2.$var } f1 echo 4.$var bash# /usr/local/bash-4.2.0/bin/bash declare-g.sh 1.local 2.global-changed 3.global-changed 4.global bash# I think the right result should be: 1.global 2.global-changed 3.local 4.global-changed -- Clark