On Sat, Aug 23, 2025 at 11:41 PM Martin D Kealey
<mar...@kurahaupo.gen.nz> wrote:
>
> Ignoring -i when binding (only applying it when assigning) would seem like
> a reasonable backwards-compatible extension, but can anyone think of a
> circumstance where failing to leave the name unbound, and/or failing to
> return a non-zero exit status, could conceivably break something useful?

-i may as well work the same as -l, -u, and -r, when combined with -n.
What could the user expect to happen when -i and -n are combined?
Something they actually want? Why would they want that? If your answer
is to silently ignore -i and allow the declare command to succeed, the
user still isn't getting what they expect to happen, assuming they
expected something useful. An error message is more helpful.

>From the manual:
  -n  Give each name the nameref attribute, making it a name reference
to another variable. That other variable is defined by the value of
name. All references, assignments, and attribute modifications to
name, except those using or changing the -n attribute itself, are
performed on the variable referenced by name's value. The nameref
attribute cannot be applied to array variables.

I might have expected
$ declare -ni reference=variable
to have the same effect as
$ declare -n reference=variable
$ declare -i reference
That being:
$ declare -p reference variable
declare -n reference="variable"
declare -i variable

Not going to argue that the behavior should be changed to work like that.

Reply via email to