如何修复 git 和 powershell 之间的冲突符号?

问题描述 投票:0回答:1

当我在 pwsh 中指定 gitrevisions(例如 HEAD@{3})时,我必须有条件地记住用引号将其引起来。如果我不这样做,它会将“@”视为数组子表达式运算符,这会破坏命令,导致 “致命:不明确的参数‘HEAD@’:未知修订版或路径不在工作树中”。

如何配置 git (2.44.0) 或 pwsh (7.4.2) 来防止这些冲突的符号?

我尝试过使用 git 和 pwsh 别名,但它们都只是命令的别名。

windows git powershell quoting
1个回答
0
投票

如何配置 git (2.44.0) 或 pwsh (7.4.2) 来防止这些冲突的符号?

你不能。您无法逃避正在使用的 shell 的语法规则。

PowerShell 的不同寻常之处在于,它比其他 shell 拥有更多元字符(具有特殊含义的字符),特别是包括

@ { } , ; ` 
(有关详细信息,请参阅此答案)。

要逐字使用这些字符,您需要:

    两者之一:
  • 转义

    ,使用 `(反引号)、PowerShell 的

    转义字符

    例如,
      git ... HEAD@`{3`}
    • - 请注意,在这种情况下,
      @
      确实不需要转义,因为它出现在参数的
      内部
      中。
    • 或:将包含元字符的整个参数括在
  • 引号
  • 中('...'创建逐字字符串,或

    "..."
    创建可扩展(插值字符串)。
    
    例如,git ... 'HEAD@{3}'

    • 
      
    • 有一种非常有限的方法可以阻止 PowerShell 应用其通常的解析规则,即
    --%
停止解析标记

(有关限制的摘要,请参阅

这个答案
的底部部分)。 但是,您仍然需要记住在需要时使用it
例如,git ... --% HEAD@{3}

  • 
    
  • 我必须有条件地记住用引号括起来。

如果您不想了解哪些(其他)字符需要在 PowerShell 中转义/引用,您唯一的选择是

调用不同的 shell

,例如 Windows 上的
cmd.exe

,并传递命令行来调用 as单个字符串

然而,这可能会带来报价挑战并带来性能损失。
例如,
cmd /c 'git ... HEAD@{3}'

  • 	
© www.soinside.com 2019 - 2024. All rights reserved.