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.
我正在尝试将一个包含三个值的数组分配给一个变量,如果它还没有用行
: ${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.