Powershell 中的 Git 命令:"git log $strVar" 不起作用

Git command in Powershell: "git log $strVar" does not work

在 PowerShell 中,下面的 git 命令不起作用

$strVar = "--graph --oneline"
git log $strVar

它returns:fatal: unrecognized argument: --graph --oneline。为什么不起作用?

我注意到 space 与我的问题有关,因为这会起作用:

git log "--oneline"

但这行不通:

git log "--oneline " 

git log "--oneline " 不起作用,因为 git 接收 --oneline 和尾随 space 作为单个参数。与您的 git log $strVar 相同,其中 git 接收 $strVar 作为参数。 PowerShell 适用于对象而不是字符串,因此在 PowerShell 中,您通常不会像那样将参数保存在字符串中,而是使用数组,然后 运行 使用 call operator &

命令
$params = "--graph", "--oneline" # Or '@("--graph", "--oneline")'
# '@()' denotes an array, '+' is an array concatenation
& git (@("log") + $params)
# Alternative way, the comma operator converts the operand to array
& git (,"log" + $params)

您也可以对单个字符串中的参数使用 Invoke-Expression,但前提是整个命令行很简单,因为如果有特殊字符,则需要进行一些转义

$params = "--graph --oneline"
Invoke-Expression ("git log " + $params)
iex "git log $params" # Alias of Invoke-Expression

另一个解决方案是使用Start-Process

Start-Process -FilePath git -ArgumentList (@("log") + $params)
saps git (,"log" + $params) # Alias