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

2020-07-09 20:11:05 +08:00
 feng32

测试指令如下:

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

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

这样就有效果了:VAR=value bash -c 'echo $VAR'
wxg4net
2020-07-09 20:43:16 +08:00
@dangyuluo 你说的不错
如果这样写
VAR=def bash -c 'echo $VAR'
或许更能补充理解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/688657

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX