You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker run执行单行脚本时使用容器内置环境变量是否可行?

问题结论

你给出的原有命令无法实现预期效果,核心问题是变量展开时机错误。

问题原因

你使用双引号包裹sh -c的脚本内容时,$((ARRAY_INDEX + 1))、${colors[${LINE}]}这类带$的表达式,会在宿主机Shell执行docker命令时就提前展开解析,而非传入容器后由容器内的Shell解析。
宿主机环境不存在你预置在镜像里的ARRAY_INDEX变量,也没有定义colors数组,最终传入容器执行的脚本内容完全不符合预期。

修复方案

你可以任选以下任意一种方法修改命令,即可实现预期逻辑:

  • 方案一:改用单引号包裹脚本内容,阻止宿主机提前解析变量
docker run ubuntu:updated sh -c 'colors=(red orange white gray);LINE=$((ARRAY_INDEX + 1));echo ${colors[${LINE}]}'
  • 方案二:保留双引号的前提下,给容器内需要解析的变量的$符号添加转义符
docker run ubuntu:updated sh -c "colors=(red orange white gray);LINE=\$((ARRAY_INDEX + 1));echo \${colors[\${LINE}]}"

额外注意:Shell数组下标默认从0开始,你预置的ARRAY_INDEX值不能超过2,否则会出现数组越界,最终输出为空。

内容的提问来源于stack exchange,提问作者Prabhat Saxena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:15:03