我正在尝试为变量分配三个值的数组(如果尚未使用该行分配
) : ${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,它可以像我期望的那样作为数组处理。
答案 0 :(得分:2)
如何分几个阶段完成?首先声明回退数组,然后检查是否设置了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。