Bash 默认值赋值中的数组值

Bash Array value in default value assignment

我正在尝试将一个包含三个值的数组分配给一个变量,如果它还没有用行

: ${SEAFILE_MYSQL_DB_NAMES:=(ccnet-db seafile-db seahub-db)}

不幸的是,回显 ${SEAFILE_MYSQL_DB_NAMES[@]} 导致 (ccnet-db seafile-db seahub-db)${SEAFILE_MYSQL_DB_NAMES[2]} 什么也不打印。看起来,该值已被解释为字符串而不是数组。有什么方法可以让我的脚本以这种方式分配数组吗?

此问题发生在装有 bash 4.3.30 的 Debian Jessie 上(如果重要,则在 docker 容器中)。有趣的是,相同的代码在 Ubuntu 16.04 和 bash 版本 4.3.42 上工作,它按照我的预期作为数组处理。

分几个阶段做怎么样?首先声明回退数组,然后检查是否设置了SEAFILE_MYSQL_DB_NAMES,如果需要则赋值。

DBS=(ccnet-db seafile-db seahub-db)
[[ -v SEAFILE_MYSQL_DB_NAMES ]] || read -ra SEAFILE_MYSQL_DB_NAMES <<< ${DBS[@]}

基于this answer.