全部,原谅我,我是Power Shell
的新手,目前我正在读书Windows PowerShell CookBook
尝试着手开始。到目前为止,除了一件事之外,一切都对我有意义,我对Positional Parameter
到Cmdlet
完全感到困惑。
例如:Select-String
语法如下:
Select-String [-Pattern] <String[]> [-Path] <String[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>]
[-Encoding <String>] [-Exclude <String[]>] [-Include <String[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch]
[<CommonParameters>]
Select-String [-Pattern] <String[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>] [-Encoding <String>]
[-Exclude <String[]>] [-Include <String[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] -InputObject <PSObject>
[<CommonParameters>]
Select-String [-Pattern] <String[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>] [-Encoding <String>]
[-Exclude <String[]>] [-Include <String[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] -LiteralPath <String[]>
[<CommonParameters>]
我可以通过忽略参数名称直接将参数值传递给Cmdlet
。如下所示:
"Hello World"|Select-String .
基于Positional parameter
的概念,因为参数-Pattern
是第一个参数。值.
可以与参数-Pattern
匹配。我可以理解。
但是当我尝试使用此命令行"hello world" | Select-String -AllMatches .
时,值.
不在第一个中。为什么Select-String
可以知道并计算出结果?有人可以告诉我更多了解它吗?感谢。
答案 0 :(得分:6)
这是第一个未命名的参数。位置值告诉cmdlet哪个参数属于哪个参数。
命令Select-String -allmatches .
将-allmatches
开关链接到其参数,并将.
设置为$args
- 数组(arguments-array)中的第一项,因为它在它前面没有-parametername
。
然后因为Select-String
包含其参数的位置值,cmdlet知道arguments-array($args[0]
)中的第一项应该绑定到-Pattern
参数。< / p>
如果您想更好地理解这一点,请通过运行以下内容阅读帮助部分中有关Parameter Position?
的部分:
Get-Help about_Parameters
然后注意-Pattern
参数的位置为1,如下所示:
Get-Help select-string -Parameter pattern
-Pattern <String[]>
Specifies the text to find. Type a string or regular expression. If you type a string, use the SimpleMatch parameter.
To learn about regular expressions, see about_Regular_Expressions.
Required? true
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
然后运行以下行以查看PowerShell如何绑定inputobject "hello world"
以及参数和参数。
Trace-Command -Expression { "Hello World" | Select-String -allmatches . } -Name ParameterBinding -PSHost