4
[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`

4

2 に答える 2

5

その理由は、コマンドが引数を任意の値ではなくechoとして解釈しているためです。stringしたがって、最初の例では、引数を値として解釈するのではなく、文字どおりに出力しています。2 番目のケースでは、式として解釈され、値に割り当てられています。

出力をコンソールにエコーする関数を自分で作成することで、この動作を再現できます。

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-13T17:48:14.577 に答える
3

PowerShellは、コマンドを解釈するときに、引数モードと式モードの2つのモードを使用します(about_Parsingトピックを参照)。

以下は式モードで解析されるため、値が返されます。

$mv = [uint32]::maxvalue
echo $mv

引数モードでは、次のいずれかの文字で始まらない限り、すべてが文字列として扱われます:$、@、'、 "、(

echo [uint32]::maxvalue

引数(-InputObject)は文字列として解析され、文字通りエコーバックされます。それを評価するには、式として認識されるように強制する必要があります。括弧で囲むと、次のようになります。

echo ([uint32]::maxvalue)
4294967295
于 2012-07-14T11:41:39.777 に答える