最反常的一点是,Bash 里真正能顺利跨进程传递的,反而不是数组,而是最普通的 `name=value` 字符串。GNU Bash 手册把环境定义成名值对列表,shell 启动时只会把被 export 的变量交给子进程;同一份手册又明确说,Bash 提供的是一维 indexed / associative array [1][2]。
判断
所以,数组不是‘写法不够巧’就能塞进环境变量的对象。Docker Compose 也只是在 `environment` 和 `env_file` 里提供键值对入口,而且它对环境变量的设置方式、覆盖顺序和 `env_file` 细节还在 2.24.0、2.30.0 之后继续细化 [3]。真正稳的做法通常只有两条路:先把数组序列化成 JSON 或分隔字符串,再交给下游解析,或者干脆把数组逻辑留在同一个进程里,不要假装环境变量会帮你保留边界。
如果你看到一段脚本在本地跑得通、进到 CI 就丢值、顺序乱掉或者空元素消失,大概率不是‘Bash 太怪’,而是你把两种模型混在了一起:Bash 数组是 shell 内部结构,环境变量是进程间传递的字符串接口。接口一旦选错,后面再补救只会越来越别扭。

全部 0条评论