On Sun, Mar 10, 2024, at 5:36 PM, Greg Wooledge wrote: > Here it is in action. "local -g" (or "declare -g") without an assignment > in the same command definitely does things. > > hobbit:~$ f() { declare -g var; var=in_f; } > hobbit:~$ unset -v var; f; declare -p var > declare -- var="in_f"
This example appears to work the same without "declare -g": $ f() { var=in_f; } $ unset -v var; f; declare -p var declare -- var="in_f" But you're right that it does have an effect. I overlooked attributes: $ printvar() { printf '%s: <%s> <%s>\n' "$1" "$var" "${var@a}"; } $ x() { local var; y; printvar outer; } $ y() { local var; z; printvar inner; } $ z() { local -gu var; var=hello; printvar innermost; } $ x; printvar outermost innermost: <hello> <> inner: <hello> <> outer: <> <> outermost: <> <u> -- vq