[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Variable references (declare -n, "nameref") are limited to a depth o
From: |
Andrej Podzimek |
Subject: |
Re: Variable references (declare -n, "nameref") are limited to a depth of 8. |
Date: |
Sun, 26 Apr 2020 05:46:15 +0200 (GMT+02:00) |
>> Description:
>>
>> While looking for a way to share a "cache" array with a recursive function
>> call stack (using local -n (nameref)), I hit a well-known problem with
>> "circular name reference" (which has been around for a long time).
>
> Yes, that's how it does loop detection.
There are, however, no loops involved in my $a … $k example; it is merely a
chain of declare -n references starting from a regular variable $a. The chain
breaks unexpectedly and silently after 8 links ($j and $k appear to be empty).
Better options, IMHO, would include:
(a) An unlimited number of declare -n resolution steps (as long as there are no
cycles, i.e., no variable name(*) is encountered twice). This may have
performance consequences when abused, but it would be better than unexpected
empty values after >8 steps.
(b) An error message when trying to dereference $j or $k (links No. 9 and 10 in
the chain example), saying e.g. “maximum nameref depth (8) exceeded”. This
would at least make the problem obvious and easy to debug.
(*) More precisely, this would be [function context, variable name] pairs in
case of local variables referenced by declare -n.
Andrej