对PowerShell处理与childitem不同的函数的原因感到困惑,即使是相同的类型

sco*_*obi 2 powershell

我对这两件事之间的区别感到困惑:

$env:path
Run Code Online (Sandbox Code Playgroud)

function path {$env:path}
path
Run Code Online (Sandbox Code Playgroud)

根据get-member,两者都返回字符串.然而,匹配对两者都不起作用.

如果我在$ env:path上使用-match,它就像我期望的那样工作,返回true/false.但是如果我在路径上使用-match(新函数),那么它总是返回路径,忽略-match.

我很困惑,因为两个返回字符串,因此应该工作相同.该函数是否需要做一些特殊的事情来获得相同的结果?

x0n*_*x0n 5

大卫是对的.不同之处在于-match被视为路径函数的参数.所以,

$(path) -match "foo"
Run Code Online (Sandbox Code Playgroud)

要么

(path) -match "foo" 
Run Code Online (Sandbox Code Playgroud)

同样有效.前者是子表达式,后者是嵌套管道(在这种情况下通常效果相同,但存在细微差别.)

校验:

ps> function path {$env:path; write-host "parameters: $args"}
ps> path -match "foo"
(env:path expanded)
parameters: -match foo
Run Code Online (Sandbox Code Playgroud)

-Oisin