53

Bashでは、次のようなことが簡単にできます

command1 && command2 || command3

これは、command1 を実行し、command1 が command2 の実行に成功し、command1 が command3 の実行に失敗した場合を意味します。

PowerShell で同等のものは何ですか?

4

4 に答える 4

12

Bash がしなければならないことは、論理演算子に渡されるときに、コマンドの終了コードをブール値に暗黙的にキャストすることです。PowerShell はこれを行いませんが、コマンドをラップして同じ動作を作成する関数を作成できます。

> function Get-ExitBoolean($cmd) { & $cmd | Out-Null; $? }

( $? は、最後の終了コードの成功を含む bool です)

2 つのバッチ ファイルがあるとします。

#pass.cmd
exit

#fail.cmd
exit /b 200

...動作をテストできます:

> if (Get-ExitBoolean .\pass.cmd) { write pass } else { write fail }
pass
> if (Get-ExitBoolean .\fail.cmd) { write pass } else { write fail }
fail

論理演算子は、Bash と同じ方法で評価する必要があります。まず、エイリアスを設定します。

> Set-Alias geb Get-ExitBoolean

テスト:

> (geb .\pass.cmd) -and (geb .\fail.cmd)
False
> (geb .\fail.cmd) -and (geb .\pass.cmd)
False
> (geb .\pass.cmd) -and (geb .\pass.cmd)
True
> (geb .\pass.cmd) -or (geb .\fail.cmd)
True
于 2010-03-10T12:43:31.727 に答える