在 Bash 中混合间接扩展和参数转换时的奇怪行为

LHL*_*ini 5 bash indirection

根据这个答案,我可以检查数组是否是索引的或关联的,如下所示:

$ declare -a a
$ declare -A b
$ echo ${a@a}
a
$ echo ${b@a}
A
Run Code Online (Sandbox Code Playgroud)

然而,如果我使用间接扩展,它就不起作用:

$ var=a
$ echo ${!var@a}

$ var=b
$ echo ${!var@a}

$
Run Code Online (Sandbox Code Playgroud)

然而,如果我初始化数组,它现在又可以工作了:

$ a=()
$ b=()
$ var=a
$ echo ${!var@a}
a
$ var=b
$ echo ${!var@a}
A
$
Run Code Online (Sandbox Code Playgroud)

这是预期行为还是 Bash 错误?

$ bash --version
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
[...]
Run Code Online (Sandbox Code Playgroud)