Bash

如何附加到具有動態變數名的數組?

  • May 21, 2022
section_example=(one two three)
name=example; section_$name+=(four)

bash: syntax error near unexpected token `four'

部分名稱事先是未知的。evaldeclare -a輸出相同的錯誤。我看到的唯一方法是聲明一個帶有部分名稱和值的關聯數組。

如果雙引號,evaled 命令會失敗嗎?喜歡

name=example; eval "section_$name+=(six)"
echo "${section_example[@]}"
one two three four five six

最近的bashes 提供“nameref”變數。man bash

可以使用 -n 選項為 declare 或 local 內置命令(請參閱下面的 declare 和 local 的描述)分配 nameref 屬性以創建 nameref 或對另一個變數的引用。這允許間接地操縱變數……

嘗試

> declare -n NamRef=section_$name
> NamRef+=(four)
> echo "${NamRef[@]}"
one two three four
> echo "${section_example[@]}"
one two three four

引用自:https://unix.stackexchange.com/questions/703362