环境变量是什么意思 !::=::\

What is the meaning of environment variable !::=::\

我发现我的环境变量有一条奇怪的线:

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

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

知道它是什么以及如何设置它吗?

这是 Cygwin 对 Windows 命令处理器 (cmd.exe) 创建的 special environment variables 之一的表示,以便以相同的方式跟踪每个驱动器的单独当前目录 MS- DOS 做到了。您还应该在 env 的输出中看到 !C:=C:\Users\Ross Ridge 之类的条目。 Windows 命令处理器以 =X:=X:\Path 的形式创建它们,但 Cygwin 将初始 = 更改为 ! 以使其成为合法的 Unix 环境条目。

所以你在 Cygwin 环境中看到 !::=::\ 的原因是因为 =::=::\ 在 Cygwin 继承的 Windows 环境中。我不确定为什么 Windows 环境中有一个 =::=::\ 条目,: 不是合法的驱动器号,而是 Raymond Chen says it's a bug。它存在于我计算机上的 Windows 环境中,即使我使用 Win-R 直接启动 Cygwin bash 而没有使用 cmd.exe,所以不清楚实际设置它是什么。