echo [uint32] :: maxvalue表示'uint32 :: maxvalue'而不是4294967295

pm1*_*100 4 powershell

[DBG]: PS C:\Windows\system32>>> echo [uint32]::maxvalue
[uint32]::maxvalue
Run Code Online (Sandbox Code Playgroud)

[DBG]: PS C:\Windows\system32>>> $mv = [uint32]::maxvalue
[DBG]: PS C:\Windows\system32>>> echo $mv
4294967295
Run Code Online (Sandbox Code Playgroud)

我确信powershell有一个很好的理由这样做:-).有道路我可以告诉它不要这样做.我实际上是传递和int到一个函数,有时我想传递maxvalue

我知道我能做到

$mv = [uint32]::maxvalue
MyFunc $mv
Run Code Online (Sandbox Code Playgroud)

我想知道是否有类似的东西

MyFunc ([uint32]::maxvalue)
MyFunc `[uint32::maxvalue`
Run Code Online (Sandbox Code Playgroud)

等等

Jar*_*Par 5

原因是echo命令将参数解释为a string而不是任意值.因此,在第一个例子中,它从字面上打印出论据,而不是将其解释为一个值.在第二种情况下,虽然它被解释为表达式并被赋值给一个值.

您可以通过自己创建一个函数来重现此行为,该函数将输出回显到控制台.

function example { 
  param ([string]$arg)
  Write-Output $arg
}

example [uint]
> [uint]
example 42
> 42
Run Code Online (Sandbox Code Playgroud)

您还可以echo通过使用()s指定它是一个表达式来强制该函数将其解释为值

echo [uint32]::maxvalue
> [uint32]::maxvalue
echo ([uint32]::maxvalue)
> 4294967295
Run Code Online (Sandbox Code Playgroud)