我感觉好像中风了。我目前在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'
欢迎来到POSIX兼容外壳行为的痛苦世界。
分配中的反斜杠“转义”空格字符。这意味着它们不会被视为通常会终止字符串的空格。反斜杠已删除,因为它们达到了目的。这与环境变量无关。这是反斜杠在POSIX shell中的工作方式。尝试echo a\ b\"c
。
然后,当您使用时$BROWSER
,shell用该变量的值替换了该变量引用。然后将结果拆分为$IFS
变量的值。由于$IFS
通常包含空格,制表符和换行符,因此浏览器路径在嵌入的空格上分为三个不同的字符串。您可以通过运行看到这种情况printf "%s\n" $BROWSER
。
解决的办法是引用变量扩展来抑制$IFS
分裂。换句话说,使用"$BROWSER"
。实际上,几乎应该始终将变量扩展放在双引号内。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句