我有一个Bash的情况,以前从未遇到过,也不知道如何解决。我在Alpine Linux(Docker容器)上安装了bash,出于某种原因,带引号的环境变量会按字面意义翻译。
MY_PATH="/home/my/path"
> cd $MY_PATH
结果
bash: cd: "/home/my/path": No such file or directory
> echo $MY_PATH
结果
"/home/my/path"
现在,如果您尝试不使用引号就可以了
MY_PATH=/home/my/path
> cd $MY_PATH
结果
bash-4.4#
(路径已更改)
> echo $MY_PATH
结果
/home/my/path
我以前从未见过这种情况,因为我希望bash吞噬外部引号,甚至不确定在尝试解决此问题时要寻找的内容。
要完全证明这种情况,我要指出:
更新
这开始看起来像是docker问题。我正在使用env_file in Docker Compose将环境变量推送到容器,看起来像是从字面上复制引号" => \"
。
感谢@bishop的评论,以尝试od -x
container.env
#!/usr/bin/env bash
MY_PATH="/home/my/path"
然后在运行env
的Alpine 3.8容器中
MY_PATH="/home/my/path"
更新2
看起来好像有一个bug around this that was closed.,但似乎并没有固定。是因为我是宇宙中唯一仍在使用Docker Toolbox的人吗?
答案 0 :(得分:7)
https://docs.docker.com/compose/env-file/
这些语法规则适用于
.env
文件:
- Compose期望
env
文件中的每一行都是VAR=VAL
格式。- 以
#
开头的行被视为注释并被忽略。- 空白行将被忽略。
- 没有对引号的特殊处理。这意味着它们是VAL的一部分。
尤其是,该env文件不是Shell脚本,也不为bash所看到(您的#!/usr/bin/env bash
行被视为注释并被忽略了。)