[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有一些非常好的理由这样做:-)。有没有什么方法我可以告诉它不要这么做。我实际上是在向函数传递and和int,有时我想传递maxvalue
我知道我能做到
$mv = [uint32]::maxvalue
MyFunc $mv我想知道有没有像这样的东西
MyFunc ([uint32]::maxvalue)
MyFunc `[uint32::maxvalue`等
发布于 2012-07-14 01:48:15
原因是echo命令将参数解释为string而不是任意值。因此,在第一个示例中,它从字面上打印出参数,而不是将其解释为值。在第二种情况下,它被解释为一个表达式,并被赋值。
您可以通过自己创建一个将输出回显到控制台的函数来重现此行为。
function example {
param ([string]$arg)
Write-Output $arg
}
example [uint]
> [uint]
example 42
> 42还可以使用()s将其指定为表达式,从而强制echo函数将其解释为值
echo [uint32]::maxvalue
> [uint32]::maxvalue
echo ([uint32]::maxvalue)
> 4294967295发布于 2012-07-14 19:41:40
PowerShell在插入命令时使用两种模式:参数模式和表达式模式(请参阅about_Parsing主题)。
下面的代码是在表达式模式下解析的,这就是为什么要取回这个值的原因。
$mv = [uint32]::maxvalue
echo $mv在参数模式下,所有内容都被视为字符串,除非它以以下字符之一开头:$、@、‘、“、(
echo [uint32]::maxvalue参数(-InputObject)被解析为字符串,并按字面意思回显。要计算它,你需要强制它被识别为表达式,将它括在括号中完成以下工作:
echo ([uint32]::maxvalue)
4294967295https://stackoverflow.com/questions/11475566
复制相似问题