有没有一种方法可以引用先前输入的命令的倒数第二个单词(例如 $^ 表示第一个单词, $$ 表示最后一个单词)
Is there a way to refer to the second last word of the previously entered command (like $^ for the first and $$ for the last word)
在PowerShell中,输入命令时,我可以用$^
和$$
来引用最近输入的命令的第一个字和最后一个字的值。我想知道是否有快捷方式来引用倒数第二个、倒数第 n 个或第 n 个单词。
没有直接等同于 automatic variables you mention, but you can combine Get-History
with PowerShell's language parser (System.Management.Automation.Language.Parser
) 来实现您的意图:
function Get-PrevCmdLineTokens {
# Get the previous command line's text.
$prevCmdLine = (Get-History)[-1].CommandLine
# Use the language parser to break it into syntactic elements.
$tokens = $null
$null = [System.Management.Automation.Language.Parser]::ParseInput(
$prevCmdLine,
[ref] $tokens,
[ref] $null
)
# Get and output an array of the text representations of the syntactic elements,
# (excluding the final `EndOfInput` element).
$tokens[0..($tokens.Count - 2)].Text
}
示例:
PS> $null = Write-Output Honey "I'm $HOME"
PS> Get-PrevCmdLineTokens
以上结果:
$null
=
Write-Output
Honey
"I'm $HOME"
注:
与$^
和$$
一样,组成命令的标记是未扩展的,这意味着它们被表示为输入而不是内插值。
然而,与$^
和$$
不同的,任何句法引用是保留(例如,"I'm $HOME"
而不是 I'm $HOME
)。
- 虽然您可以在上面的函数中使用
.Value
而不是 .Text
来去除句法引号,但是您会错过诸如 $null
和 =
.
在PowerShell中,输入命令时,我可以用$^
和$$
来引用最近输入的命令的第一个字和最后一个字的值。我想知道是否有快捷方式来引用倒数第二个、倒数第 n 个或第 n 个单词。
没有直接等同于 automatic variables you mention, but you can combine Get-History
with PowerShell's language parser (System.Management.Automation.Language.Parser
) 来实现您的意图:
function Get-PrevCmdLineTokens {
# Get the previous command line's text.
$prevCmdLine = (Get-History)[-1].CommandLine
# Use the language parser to break it into syntactic elements.
$tokens = $null
$null = [System.Management.Automation.Language.Parser]::ParseInput(
$prevCmdLine,
[ref] $tokens,
[ref] $null
)
# Get and output an array of the text representations of the syntactic elements,
# (excluding the final `EndOfInput` element).
$tokens[0..($tokens.Count - 2)].Text
}
示例:
PS> $null = Write-Output Honey "I'm $HOME"
PS> Get-PrevCmdLineTokens
以上结果:
$null
=
Write-Output
Honey
"I'm $HOME"
注:
与
$^
和$$
一样,组成命令的标记是未扩展的,这意味着它们被表示为输入而不是内插值。然而,与
$^
和$$
不同的,任何句法引用是保留(例如,"I'm $HOME"
而不是I'm $HOME
)。- 虽然您可以在上面的函数中使用
.Value
而不是.Text
来去除句法引号,但是您会错过诸如$null
和=
.
- 虽然您可以在上面的函数中使用