On Sun, Dec 11, 2022, at 9:37 PM, L A Walsh wrote: > I suppose one could create an alias (despite advice that > functions are "better" -- in this case a function doesn't work). > I'm using ':;' for PS1, so cut/paste works: > > PS1=':; ' > > :; Export () { > :; typeset -x "$@" > :; } > :; Export -r foo_xr=1 > > :; typeset -p foo_xr > -bash: typeset: foo_xr: not found
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" -- vq