两个真实问题:
1) upsert_env_key 一律用双引号包裹 → JSON 值(含双引号)会写成
KEY={a:b} 这种坏行,docker compose 解析会崩/取到残缺值;
现在:值里含双引号就用单引号包(JSON 不含单引号,安全)。
2) 原来用 awk 'BEGIN{FS=OFS==} =...' 重建行,会把值里 = 之后的内容丢掉
(base64 密钥常带 = 填充)→ 改用 grep -v + 追加,值原样保留。
已用 Git Bash 对函数本身做单测(8 项断言全过):JSON 单引号包裹、带 = 的值不丢、
普通值双引号、重复更新不堆行、sed 取回后 JSON.parse 成功。