PowerShellの次のビットを検討してください。
PS> $x = 'y'
PS> ($x = 'y')
y
なぜparensを追加すると、値が出力されるのですか?
編集:いくつかのより興味深いケース:
PS> $z = ($x = 'y')
PS> $z
y
PS> $( $x = $y )
PS> $z = $( $x = $y )
PS> $z
PowerShellの次のビットを検討してください。
PS> $x = 'y'
PS> ($x = 'y')
y
なぜparensを追加すると、値が出力されるのですか?
編集:いくつかのより興味深いケース:
PS> $z = ($x = 'y')
PS> $z
y
PS> $( $x = $y )
PS> $z = $( $x = $y )
PS> $z
括弧は、最初に括弧内の値を評価してから結果を出力するようにシェルに指示します。最初のコマンドでは、それは割り当てです。ただし、2つ目は、評価されて結果を出力するコマンド、つまり「y」です。
アップデート
PS> $z = ($x = 'y') # assignment, no print , ($x = 'y') returns 'y'
PS> $z
y
PS> $( $x = $y ) # this is a voidable expression whose result is discarded when used directly as a statement. so, $( $x = $y ) -eq $null
PS> $z = $( $x = $y ) # same to above
PS> $z
「PowerShellinAction」では、部分式の構成と単純な括弧の違いは、無効なステートメントの処理方法であると述べています。++、-、+ =、-=操作も無効なステートメントとして扱われます。
単純な括弧()では、取消可能なステートメントは破棄されませんが、部分式$()では、それらは破棄されます。
副作用のある式は、ステートメントとして使用された場合、通常は結果を返しません。例えば:
PS> $x = $a++
明らかに、$a++
これが機能するには値が必要です。でも:
PS> if (...) $a++
これでの値を出力したくありません$a
。したがって、結果は破棄されます。
グループ化された括弧はこの動作をオーバーライドし、無効にできる場合でも、結果をパイプラインに強制的に返します。
PS> ($x = 'y')
'y'
一方、無効にできない式を無効にするには、次の場所にキャストするvoid
か、次の場所にパイプしOut-Null
ます。
PS> mkdir Foo | Out-Null
PS> [void](mkdir Bar)
Windows PowerShell言語仕様-7.1.1かっこをグループ化しますが、「取消し可能な式」という用語は使用しません。