繁体   English   中英

为什么bash使用单引号和双引号?

[英]Why is bash using single and double quotes literally?

我有一个Bash的情况,我以前从未遇到过,也不知道如何解决。 我在Alpine Linux(Docker Container)上安装了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能够吞噬外部引号,甚至不确定在尝试解决这个问题时要搜索什么。

为了完全符合这种情况,请允许我指出:

  1. 使用Docker和Alpine(3.8)图像
  2. 在Alpine上安装Bash 4,通常默认为灰壳

更新

这开始看起来像一个码头工人问题。 我正在使用Docker Compose中env_file将环境变量推送到容器,它看起来像是字面上复制引号" => \\"

感谢@ bishop的评论尝试od -x

container.env

#!/usr/bin/env bash
MY_PATH="/home/my/path"

然后高山3.8容器中运行的内部env

MY_PATH="/home/my/path"

更新2

看起来周围有一个关闭bug。 但显然似乎并不固定。 是因为我是宇宙中唯一还在使用Docker Toolbox的人吗?

https://docs.docker.com/compose/env-file/

这些语法规则适用于.env文件:

  • Compose期望env文件中的每一行都是VAR=VAL格式。
  • #开头的行将作为注释处理并被忽略。
  • 空行被忽略。
  • 没有特殊的引号处理。 这意味着它们是VAL的一部分

特别是,env文件不是shell脚本,bash看不到(你的#!/usr/bin/env bash行被视为注释而被忽略)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM