V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
feng32
V2EX  ›  程序员

为何 Docker 中的 Bash 无法覆盖环境变量?

  •  
  •   feng32 · 2020-07-09 20:11:05 +08:00 · 1504 次点击
    这是一个创建于 1605 天前的主题,其中的信息可能已经有所发展或是发生改变。

    测试指令如下:

    docker run -it -e VAR='abc' centos:7 bash
    [root@541b2bdd4a9d /]# echo $VAR
    abc
    [root@541b2bdd4a9d /]# VAR=def echo $VAR
    abc
    [root@541b2bdd4a9d /]# 
    
    6 条回复    2020-07-09 20:43:16 +08:00
    wxg4net
        1
    wxg4net  
       2020-07-09 20:27:12 +08:00
    这和 Docker 没有关系,即使本地 shell 也不支持你这种用法.应该是 echo 不支持这种写法
    VAR=def; echo $VAR
    VAR=def && echo $VAR
    这样就可以
    dangyuluo
        2
    dangyuluo  
       2020-07-09 20:28:48 +08:00
    @wxg4net 你可能不知道这种语法

    VAR=def echo $VAR
    wxg4net
        3
    wxg4net  
       2020-07-09 20:30:39 +08:00
    @dangyuluo 认真读读我的回复
    dangyuluo
        4
    dangyuluo  
       2020-07-09 20:31:11 +08:00   ❤️ 1
    这是 shell 的特色,echo $VAR 在 被 shell 执行前,$VAR 就已经被替换为 abc 这个值了。shell 实际执行的是`VAR=def echo abc`这个指令
    aloxaf
        5
    aloxaf  
       2020-07-09 20:43:14 +08:00   ❤️ 1
    1. VAR=VALUE COMMAND 这种格式是为 COMMAND 临时设定**环境变量**
    2. 这个地方 $VAR 没有单引号,是由 shell 自己展开的,当然即使加了引号也没用,因为 echo 是内部命令。

    这样就有效果了:VAR=value bash -c 'echo $VAR'
    wxg4net
        6
    wxg4net  
       2020-07-09 20:43:16 +08:00
    @dangyuluo 你说的不错
    如果这样写
    VAR=def bash -c 'echo $VAR'
    或许更能补充理解
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2720 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 09:12 · PVG 17:12 · LAX 01:12 · JFK 04:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.