在PowerShell中,输入命令时,我可以使用$^
和$$
引用最近输入的命令的第一个和最后一个单词的值。我想知道是否有快捷方式可以引用倒数第二个、倒数第 n 个或第 n 个单词。
最佳答案
没有与 automatic variables 直接等效的东西你提到,但你可以结合 Get-History
使用 PowerShell 的语言解析器 ( 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 - 有没有办法引用先前输入的命令的倒数第二个单词(例如 $^ 代表第一个单词, $$ 代表最后一个单词),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68567999/