默认值赋值中的Bash Array值

Rik*_*Xan 6 arrays bash default-value colon

我正在尝试将一个包含三个值的数组分配给变量,如果尚未使用该行分配的话

: ${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]}没有打印任何内容.看来,该值已被解释为字符串而不是数组.有什么方法可以让我的脚本以这种方式分配数组吗?

这个问题出现在Debian Jessie上,有bash 4.3.30(如果重要的话,在docker容器中).有趣的是,相同的代码可以在Ubuntu 16.04上使用bash版本4.3.42,它可以像我期望的那样作为数组处理.

dim*_*mid 2

分几个阶段来做怎么样?首先声明后备数组,然后检查是否SEAFILE_MYSQL_DB_NAMES已设置,并在需要时进行分配。

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

基于这个答案