Linux Can';t导出WSL中的环境变量

Linux Can';t导出WSL中的环境变量,linux,environment-variables,windows-subsystem-for-linux,Linux,Environment Variables,Windows Subsystem For Linux,我觉得我好像中风了。我当前正在WSL中运行以下导出命令: export BROWSER=/mnt/c/Program\ Files/Mozilla\ Firefox/firefox.exe 但是WSL似乎没有意识到$BROWSER已经被覆盖,因为它在不使用反斜杠的情况下继续运行它: echo $BROWSER 这会在运行命令时导致以下错误: $BROWSER 这是WSL中的一个bug吗?还是我在设置环境变量时出错了 编辑: 我还尝试使用引号而不是斜杠: export BROWSER='/m

我觉得我好像中风了。我当前正在WSL中运行以下导出命令:

export BROWSER=/mnt/c/Program\ Files/Mozilla\ Firefox/firefox.exe
但是WSL似乎没有意识到$BROWSER已经被覆盖,因为它在不使用反斜杠的情况下继续运行它:

echo $BROWSER
这会在运行命令时导致以下错误:

$BROWSER
这是WSL中的一个bug吗?还是我在设置环境变量时出错了

编辑:

我还尝试使用引号而不是斜杠:

export BROWSER='/mnt/c/Program Files/Mozilla Firefox/firefox.exe'

欢迎来到POSIX兼容shell行为的痛苦世界

赋值中的反斜杠“转义”空格字符。这意味着它们不会被视为通常会终止字符串的空白。取消反斜杠是因为它们达到了目的。这与环境变量无关。这就是反斜杠在POSIX shell中的工作方式。尝试
回显a\b\“c

然后,当您使用
$BROWSER
时,shell将该变量引用替换为该变量的值。然后它将结果拆分为
$IFS
变量的值。由于
$IFS
通常包含空格、制表符和换行符,因此浏览器路径在嵌入的空格中拆分为三个不同的字符串。您可以使用e运行
printf“%s\n”$BROWSER
可实现此目的


解决方案是引用变量展开以禁止
$IFS
拆分。换句话说,使用
“$BROWSER“
。事实上,您几乎应该总是将变量展开放在双引号内。

对该路径使用引号。@Biswapriyo感谢您的评论。使用
export BROWSER='/mnt/c/Program Files/Mozilla Firefox/Firefox.exe'
试一试,但没有区别。实际上,我可以使用WSL2运行echo$BROWSER,因为它正在更正路径:
$>export BROWSER=/mnt/c/Program\Files/Mozilla\Firefox/Firefox.exe
$>echo$BROWSER
/mnt/c/Program Files/Mozilla Firefox/Firefox.exe
感谢您的回答+1我想知道您是否有一个比我在这里修复WSL中的.env更优雅的方法的建议?对不起,@Ryan,我对Heroku一无所知。您在链接到的注释中所做的只是在启动服务器之前绕过.env文件并设置环境变量。这与在运行任何其他命令之前执行
导出SOME_VAR=SOME_val
没有什么不同。请注意,您的问题与WSL本身无关。WSL只是一个Ubuntu Linux用户空间。如果你真的在Windows10之外安装了一个基于Ubuntu的服务器,你会遇到同样的问题,因为问题在于你对Heroku和相关软件的配置,而不是WSL。❤️ 我感谢你的回答,并为你的不清楚道歉:我与Heroku没有任何关系;这是提问者提出的问题(不是我)。我想我是在偷懒,没有写一个全新的问题。基本上,我的情况就是这样。除了在WSL中开发外,env一直在为我工作。我写了(作为对另一个人的回答)我的破解方法是什么。我很想更长久地解决这个问题。谢谢你花了这么多时间回复我,我向你道歉。
bash: /mnt/c/Program: No such file or directory
export BROWSER='/mnt/c/Program Files/Mozilla Firefox/firefox.exe'