为什么“:foo”扩展为“\:foo”

为什么“:foo”扩展为“\:foo”

echo.exe在 Windows 上使用 Git(MSYS2))

# expands to an invalid ADS-ish path
PS D:\path> echo.exe :bar
D:\path\:bar
# expands with double quote
PS D:\path> echo.exe ":bar"
D:\path\:bar
# expands with backquote
PS D:\path> echo.exe "`:bar"
D:\path\:bar
# expands with wsl and cmd, so not MSYS2 related
PS D:\path> wsl -e "echo" ":bar"
D:\path\:bar
PS D:\path> cmd /c "echo" ":bar"
D:\path\:bar
# not expands with single quote
PS D:\path> echo.exe ':bar'
:bar
# not expands if not starts with colon
PS D:\path> echo.exe "foo:bar"
foo:bar
# not expands if not spawns new process
PS D:\path> ":123"
:123
PS D:\path> echo ":123"
:123

迄今为止的研究:

  1. 它可能与替代数据流。这只是传递命令行。更重要的是,这会生成一个看起来像 ADS 的路径,但它不是一个有效的 ADS 路径。(也许它正在尝试?)
  2. 它与 MSYS2 无关。与 的行为相同wsl -e "echo",也cmd /c "echo"已得到验证。
  3. 这与变量扩展,因为这里没有任何变量。
  4. 经过不同版本的 PowerShell 测试,这应该是由于v7.1.3..v7.2.0-preview.1
  5. 这应该是产生新流程的一个问题。

由@LievenKeersmaekers 请求 在此处输入图片描述

相关内容