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