• 请不要在回答技术问题时复制粘贴 AI 生成的内容
feng32
V2EX  ›  程序员

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

  •  
  •   feng32 · Jul 9, 2020 · 1931 views
    This topic created in 2226 days ago, the information mentioned may be changed or developed.

    测试指令如下:

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

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

    这样就有效果了:VAR=value bash -c 'echo $VAR'
    wxg4net
        6
    wxg4net  
       Jul 9, 2020
    @dangyuluo 你说的不错
    如果这样写
    VAR=def bash -c 'echo $VAR'
    或许更能补充理解
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5259 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:03 · PVG 16:03 · LAX 01:03 · JFK 04:03
    ♥ Do have faith in what you're doing.