On 07/26/22 12:17, Laszlo Ersek wrote:
On 07/26/22 10:11, Richard W.M. Jones wrote:
> On Tue, Jul 26, 2022 at 07:13:41AM +0200, Laszlo Ersek wrote:
>> On 07/25/22 16:02, Eric Blake wrote:
>>> + for (( _i = 0; _i < $_cleanup_hook_count; ++_i )); do
>>> + local -n _hook=_cleanup_hook$_i
>>> + "${_hook[@]}"
>>
>> BTW, "nameref" variables seem like a relatively new addition to bash;
>> for example RHEL7 does not have them. Interestingly, the RHEL7 manual
>> also does not document a nameref-like construct that *does* work in
>> RHEL7, namely:
>>
>> $ bar=foo
>> $ baz=bar
>> $ echo ${!baz}
>> foo
>
> Indeed it doesn't work on RHEL 7, eg:
>
> $ make && make -C tests check TESTS=test-eflags.sh
>
> leaves tests/eflags.{err,out} around.
>
> Do you have a patch for this?
This should work:
local hook=_cleanup_hook$_i
eval "\${${hook}[@]}"
Sigh, nesting quoting is always fun; I forgot the outermost quotes. So
please make that:
eval "\"\${${hook}[@]}\""
Thanks
Laszlo
>
> [...]
>> I wonder if the bash release notes mention "nameref" as a more
flexible
>> version of "indirect expansion"... Hm, nameref was new in bash-4.3
>> <
https://lwn.net/Articles/589566/>, and RHEL7 has bash-4.2.46-35.el7_9,
>> so the lack of "nameref" is understandable (not that it matters for
>> upstream nbdkit :)); indirect expansion is not mentioned however as a
>> similar feature.
>
> Actually I'd like to keep things working on RHEL 7 if possible. It's
> still a widely used RHEL release.
>
> Rich.
>