为什么在 Windows 上的 Powershell 中某些情况下需要切换引号?

为什么在 Windows 上的 Powershell 中某些情况下需要切换引号?

昨天,我试图使用git-filter-repo使用以下命令重写我的项目的 Git 历史记录并更新作者/提交者详细信息。

git filter-repo --commit-callback '
  old_email = b"[email protected]"
  old_email2 = b"[email protected]"
  correct_name = b"FirstName LastName"
  correct_email = b"[email protected]"
  
  if commit.committer_email == old_email or commit.committer_email == old_email2:
    commit.committer_name = correct_name
    commit.committer_email = correct_email

  if commit.author_email == old_email or commit.author_email == old_email2: 
    commit.author_name = correct_name
    commit.author_email = correct_email
  '

问题是,如果我声明的任何字符串中没有空格,例如在correct_name的值中,这种方法就会有效。但否则,它会给我一个Unknown argument: LastName错误。

四处搜索后我发现了这个SO 上 5 年前的帖子这个答案建议将单引号改为双引号,反之亦然。

但奇怪的是,这却完美地起作用了。我不明白为什么会这样?

根据该帖子的 OP,这是 Powershell 中的某种错误。但是,我正在使用最新的跨平台Powershell v7.2.3


编辑

正如评论中指出的那样,引号会影响 shell 如何解析字符串。

根据文档

用单引号引起来的字符串是逐字字符串。

但如上所示,我实际上使用的是单引号,但仍然遇到一些解析问题。一旦将外引号更改为双引号,将内引号更改为单引号,命令作品

相关内容