簡體   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