无法在WSL中导出环境变量

用户名

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

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

但是WSL似乎并没有意识到$ BROWSER已被覆盖,因为它一直在运行而没有反斜杠:

echo $BROWSER
/mnt/c/Program Files/Mozilla Firefox/firefox.exe

运行命令时会导致以下错误:

$BROWSER
bash: /mnt/c/Program: No such file or directory

这是WSL中的错误吗?还是设置环境变量时出错?

编辑:

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

export BROWSER='/mnt/c/Program Files/Mozilla Firefox/firefox.exe'
柯蒂斯·雷德(Kurtis Rader)

欢迎来到POSIX兼容外壳行为的痛苦世界。

分配中的反斜杠“转义”空格字符。这意味着它们不会被视为通常会终止字符串的空格。反斜杠已删除,因为它们达到了目的。这与环境变量无关。这是反斜杠在POSIX shell中的工作方式。尝试echo a\ b\"c

然后,当您使用时$BROWSER,shell用该变量的值替换了该变量引用。然后将结果拆分为$IFS变量的值由于$IFS通常包含空格,制表符和换行符,因此浏览器路径在嵌入的空格上分为三个不同的字符串。您可以通过运行看到这种情况printf "%s\n" $BROWSER

解决的办法是引用变量扩展来抑制$IFS分裂。换句话说,使用"$BROWSER"实际上,几乎应该始终将变量扩展放在双引号内。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章