环境变量!::=::的含义是什么?

4

我发现我的环境变量中有一行奇怪的内容:

$ env
...
!::=::\
...

当我启动一个shell或运行bash脚本时,有时它会出现,有时则不会。而且当它不存在时,我的bash调用子shell $(...) 需要3个转义反斜杠,而不是每个1个。

您知道这是什么并且如何设置吗?


1
你使用的是哪个操作系统和版本?还是bash/zsh等终端?版本是多少?你主要在Ruby或Python(或其他)编程环境中工作吗?有趣。祝你好运。 - shellter
这是一个仅限于Bash的脚本,需要在Windows7下通过Cygwin运行。 - Georgy Petrov
也许你可以在文件系统中尝试使用grep命令来查找它。尝试一些变体,比如grep -r '!::=::\\' /。不过我不确定你需要如何针对cygwin进行修改。 - Aereaux
1
在“env”的输出中,这一行之前和之后出现了什么? - pasaba por aqui
1
我也在我的git-bash环境中看到了该环境变量。你能举个子shell命令问题的例子吗? - Etan Reisner
1个回答

4
这是Cygwin对Windows命令处理器(cmd.exe)创建的特殊环境变量之一的表示,以便像MS-DOS一样跟踪每个驱动器的单独当前目录。您还应该在env的输出中看到诸如!C:=C:\Users\Ross Ridge之类的条目。 Windows命令处理器以=X:=X:\Path的形式创建它们,但Cygwin将初始的=更改为!,以使其成为合法的Unix环境条目。
因此,在Cygwin环境中看到!::=::\的原因是因为=::=::\在Windows环境中,并被Cygwin继承。我不确定为什么在Windows环境中会有一个=::=::\条目,:不是合法的驱动器字符,但Raymond Chen说这是个错误。即使我使用Win-R直接启动Cygwin bash而不是使用cmd.exe,它也存在于我的计算机的Windows环境中,所以实际设置它的东西并不清楚。

找到了不错的参考链接。这并没有回答关于转义差异的附属问题(但我一开始就对这个问题持怀疑态度)。 - Etan Reisner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接