Powershell echo[uint32]:maxvalue表示';uint32::maxvalue';而不是4294967295
及 我相信powershell这样做是有充分理由的:-)。有没有办法让我告诉它不要这样做。我实际上是在向一个函数传递和int,有时我想传递maxvalue 我知道我能行Powershell echo[uint32]:maxvalue表示';uint32::maxvalue';而不是4294967295,powershell,Powershell,及 我相信powershell这样做是有充分理由的:-)。有没有办法让我告诉它不要这样做。我实际上是在向一个函数传递和int,有时我想传递maxvalue 我知道我能行 [DBG]: PS C:\Windows\system32>>> $mv = [uint32]::maxvalue [DBG]: PS C:\Windows\system32>>> echo $mv 4294967295 我想知道是否有类似的事情 $mv = [uint32]::maxval
[DBG]: PS C:\Windows\system32>>> $mv = [uint32]::maxvalue
[DBG]: PS C:\Windows\system32>>> echo $mv
4294967295
我想知道是否有类似的事情
$mv = [uint32]::maxvalue
MyFunc $mv
etc原因是
echo
命令将参数解释为字符串,而不是任意值。因此,在第一个例子中,它逐字打印参数,而不是将其解释为值。在第二种情况下,虽然它被解释为一个表达式并被赋值
您可以通过自己创建一个函数来复制此行为,该函数将输出回显到控制台
MyFunc ([uint32]::maxvalue)
MyFunc `[uint32::maxvalue`
您还可以通过使用()
s将其指定为表达式,强制echo
函数将其解释为值
function example {
param ([string]$arg)
Write-Output $arg
}
example [uint]
> [uint]
example 42
> 42
PowerShell在解释命令时使用两种模式:参数模式和表达式模式(请参阅关于解析主题)
下面是在表达式模式下解析的,这就是为什么要返回值
echo [uint32]::maxvalue
> [uint32]::maxvalue
echo ([uint32]::maxvalue)
> 4294967295
在参数模式下,所有内容都被视为字符串,除非它以以下字符之一开头:
$,@,“,”(
参数(-InputObject)被解析为字符串并按字面意义进行回显。要对其求值,您需要强制将其识别为表达式,并将其封装在参数中执行以下操作:
echo [uint32]::maxvalue
实际上这是我自己的函数,我没有指定类型——我猜它默认为字符串
$mv = [uint32]::maxvalue
echo $mv
echo [uint32]::maxvalue
echo ([uint32]::maxvalue)
4294967295