首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >echo [uint32]::maxvalue显示'uint32::maxvalue‘而不是4294967295

echo [uint32]::maxvalue显示'uint32::maxvalue‘而不是4294967295
EN

Stack Overflow用户
提问于 2012-07-14 01:40:29
回答 2查看 408关注 0票数 4
代码语言:javascript
复制
[DBG]: PS C:\Windows\system32>>> echo [uint32]::maxvalue
[uint32]::maxvalue

代码语言:javascript
复制
[DBG]: PS C:\Windows\system32>>> $mv = [uint32]::maxvalue
[DBG]: PS C:\Windows\system32>>> echo $mv
4294967295

我相信powershell有一些非常好的理由这样做:-)。有没有什么方法我可以告诉它不要这么做。我实际上是在向函数传递and和int,有时我想传递maxvalue

我知道我能做到

代码语言:javascript
复制
$mv = [uint32]::maxvalue
MyFunc $mv

我想知道有没有像这样的东西

代码语言:javascript
复制
MyFunc ([uint32]::maxvalue)
MyFunc `[uint32::maxvalue`

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-14 01:48:15

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

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

代码语言:javascript
复制
function example { 
  param ([string]$arg)
  Write-Output $arg
}

example [uint]
> [uint]
example 42
> 42

还可以使用()s将其指定为表达式,从而强制echo函数将其解释为值

代码语言:javascript
复制
echo [uint32]::maxvalue
> [uint32]::maxvalue
echo ([uint32]::maxvalue)
> 4294967295
票数 5
EN

Stack Overflow用户

发布于 2012-07-14 19:41:40

PowerShell在插入命令时使用两种模式:参数模式和表达式模式(请参阅about_Parsing主题)。

下面的代码是在表达式模式下解析的,这就是为什么要取回这个值的原因。

代码语言:javascript
复制
$mv = [uint32]::maxvalue
echo $mv

在参数模式下,所有内容都被视为字符串,除非它以以下字符之一开头:$、@、‘、“、(

代码语言:javascript
复制
echo [uint32]::maxvalue

参数(-InputObject)被解析为字符串,并按字面意思回显。要计算它,你需要强制它被识别为表达式,将它括在括号中完成以下工作:

代码语言:javascript
复制
echo ([uint32]::maxvalue)
4294967295
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11475566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档