3

次の PowerShell 割り当てステートメントを検討してください。

$rc = (gci -r -fi *.rar)

ディレクトリ構造に rar ファイルが存在する場合はecho $?、次のように表示されます。

    Directory: C:\file tests

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         7/22/2012   7:09 PM    3699776 somefile.rar

罰金。次に、この PowerShell の if ステートメントについて考えてみましょう。

if (gci -r -fi *.rar)
{
    echo "Rar files found"
}
else 
{
    echo "No rar files"
}

if ステートメントでは、gci コマンドレットからの戻り値はブール値として扱われます。ただし、前の割り当てステートメントの場合、同じコマンドレットからの戻り値は文字列出力を生成しました。

PS がオブジェクト シェルであることは知っています。コンテキストに応じてコマンドレットの動作が異なることを理解しています。しかし、私が理解していないのは、これがどのように達成され、どのメカニズムが使用されているかです。

具体的には: gci からの戻り値をブール値として処理できるようにするifステートメントで使用される魔法は何ですか? そのメカニズムを別の場所 (if ステートメント以外) で使用したい場合、どうすればよいでしょうか? 「ブール値へのキャスト」演算子のようなものはありますか? 例えば

$rc = (Cast following to boolean)(gci -r -fi *.rar)
4

2 に答える 2

8

この表が答えです。

True                                         False
~~~~                                         ~~~~~
$TRUE                                        $FALSE
Any string of length > 0                     Empty string
Any number ≠ 0                               Any number = 0
Array of length > 1                          Array of length 0
Array of length 1 whose element is true      Array of length 1 whose element is false
A reference to any object  <<<<<             $NULL

この背後にあるアイデアは、同様のチェックを使用して、オブジェクトが適切に初期化されているかどうかを確認することです。

于 2013-05-29T16:15:40.773 に答える