[DBG]: PS C:\Windows\system32>>> echo [uint32]::maxvalue
[uint32]::maxvalue
和
[DBG]: PS C:\Windows\system32>>> $mv = [uint32]::maxvalue
[DBG]: PS C:\Windows\system32>>> echo $mv
4294967295
我确信powershell有一个很好的理由这样做:-)。有道路我可以告诉它不要这样做。我实际上是传递和int到一个函数,有时我想传递maxvalue
我知道我能做到
$mv = [uint32]::maxvalue
MyFunc $mv
我想知道是否有像
这样的东西MyFunc ([uint32]::maxvalue)
MyFunc `[uint32::maxvalue`
等
答案 0 :(得分:5)
原因是echo
命令将参数解释为string
而不是任意值。因此,在第一个例子中,它从字面上打印出论据,而不是将其解释为一个值。在第二种情况下,虽然它被解释为表达式并被赋值给一个值。
您可以通过自己创建一个将输出回显到控制台的函数来重现此行为。
function example {
param ([string]$arg)
Write-Output $arg
}
example [uint]
> [uint]
example 42
> 42
您还可以强制echo
函数将其解释为值,方法是使用()
来指定它是一个表达式
echo [uint32]::maxvalue
> [uint32]::maxvalue
echo ([uint32]::maxvalue)
> 4294967295
答案 1 :(得分:3)
PowerShell在插入命令,参数模式和表达式模式时使用两种模式(参见about_Parsing主题)。
以下是在表达式模式下解析的,这就是你重新获得值的原因。
$mv = [uint32]::maxvalue
echo $mv
在Argument模式下,除非以下列字符之一开头,否则所有内容都将被视为字符串: $,@,',“,(
echo [uint32]::maxvalue
参数(-InputObject)被解析为字符串并按字面回显。要评估它,你需要强制它被识别为一个表达式,将它包含在parens中完成工作:
echo ([uint32]::maxvalue)
4294967295