On Mon, Dec 12, 2022, at 4:43 AM, L A Walsh wrote:
> On 2022/12/11 20:47, Lawrence Velázquez wrote:
>> This happens because "declare"/"typeset" creates local variables
>> within functions. Using -g works around this...
>>
>> $ Export() { declare -gx "$@"; }
>> $ Export -r foo=1
>> $ declare -p foo
>> declare -rx foo="1"
>>
>> ...but now "Export" always creates global variables, rather than
>> scoping as "declare" and your alias-based version does. On the
>> other hand, "export" also creates global variables, so in a sense
>> the workaround version is more consistent.
>>
>> $ f() { export "$@"; }
>> $ f var=1
>> $ declare -p var
>> declare -x var="1"
>>
> ----
> I see, but you still can't use "-r" w/export
Of course not. I only meant to demonstrate that "export" always
creates global variables, so a function that utilizes "declare -gx"
actually behaves more like "export" then your alias does.
> though I think the -r flag would get dropped in any exported shell
The environment does not propagate the readonly attribute, no.
> though
> in that case, one might expect an error if one uses "typeset -xr"
> along the lines of "-r flag won't be exported".
The readonly attribute is still applied to the original shell
variable, so there's no reason to produce an error.
> Side curious: If one uses -g, does it cause the var to be defined
> in all intervening functions as well as the top(global)
> and current scope?
It defines a global variable, which is then visible to all functions.
--
vq