默认值赋值中的Bash Array值

时间:2016-04-27 15:54:51

标签: 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,它可以像我期望的那样作为数组处理。

1 个答案:

答案 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