为什么 $ARRAY+=$var 对我不起作用?

为什么 $ARRAY+=$var 对我不起作用?

我正在尝试向 bash 数组添加一个元素。我在看问题并尝试遵循其建议。

这是我的代码:

selected_projects=()
for project_num in ${project_numbers[@]}; do
  selected_project=${projects[$project_num]}
  echo "selected project: $project_num $selected_project"
  $selected_projects+="$selected_project"
done

当我这样做时,我收到一个错误:

第 88 行:+=someProject:未找到命令

我尝试了许多不同的替代方案,其中包含大量括号和美元符号,但我无法弄清楚我做错了什么以及应该做什么。有任何想法吗?

谢谢!

答案1

使用

selected_projects+="$selected_project"

代替

$selected_projects+="$selected_project

bash 中的变量赋值永远不会包含$在变量名的开头。

答案2

selected_projects=()
$selected_projects+="$selected_project"

shell 中的变量赋值不使用$左侧的符号,它仅在变量值扩展时使用。这包括附加+=.你的其他任务是正确的。

此外,由于您已初始化selected_projects为数组,因此您可能想这样使用它。要将值附加到数组,您还需要在附加赋值中使用括号。因此,这将添加一个新元素selected_projects

selected_projects+=("$selected_project")

如果没有括号,赋值就像对数组的无索引引用一样:它访问带有索引的元素0。例如这打印foobar foobar

a=(); a+=foo; a+=bar; echo ${a[0]} $a

相关内容